添加集装箱
This commit is contained in:
parent
de13ad8897
commit
67f468ff4a
24 changed files with 1696 additions and 44 deletions
|
@ -1,11 +1,11 @@
|
|||
package com.atsuishio.superbwarfare;
|
||||
|
||||
import com.atsuishio.superbwarfare.config.ClientConfig;
|
||||
import com.atsuishio.superbwarfare.config.CommonConfig;
|
||||
import com.atsuishio.superbwarfare.config.ServerConfig;
|
||||
import com.atsuishio.superbwarfare.init.*;
|
||||
import com.atsuishio.superbwarfare.network.ModVariables;
|
||||
import com.atsuishio.superbwarfare.network.message.*;
|
||||
import com.atsuishio.superbwarfare.config.CommonConfig;
|
||||
import com.atsuishio.superbwarfare.config.ServerConfig;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
@ -54,6 +54,7 @@ public class ModUtils {
|
|||
ModPerks.register(bus);
|
||||
ModSounds.REGISTRY.register(bus);
|
||||
ModBlocks.REGISTRY.register(bus);
|
||||
ModBlockEntities.REGISTRY.register(bus);
|
||||
ModItems.register(bus);
|
||||
ModEntities.REGISTRY.register(bus);
|
||||
ModTabs.TABS.register(bus);
|
||||
|
|
|
@ -0,0 +1,143 @@
|
|||
|
||||
package com.atsuishio.superbwarfare.block;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
||||
import com.atsuishio.superbwarfare.init.ModEntities;
|
||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.MobSpawnType;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.LevelAccessor;
|
||||
import net.minecraft.world.level.block.*;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.StateDefinition;
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
||||
import net.minecraft.world.level.material.FluidState;
|
||||
import net.minecraft.world.level.material.Fluids;
|
||||
import net.minecraft.world.level.storage.loot.LootParams;
|
||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ContainerBlock extends BaseEntityBlock implements SimpleWaterloggedBlock, EntityBlock {
|
||||
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
|
||||
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
|
||||
|
||||
public ContainerBlock() {
|
||||
super(BlockBehaviour.Properties.of().sound(SoundType.METAL).strength(-1, 3600000).noCollission());
|
||||
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
||||
|
||||
return switch (state.getValue(FACING)) {
|
||||
default -> box(0, 0, 0, 16, 1, 16);
|
||||
case NORTH -> box(0, 0, 0, 16, 1, 16);
|
||||
case EAST -> box(0, 0, 0, 16, 1, 16);
|
||||
case WEST -> box(0, 0, 0, 16, 1, 16);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RenderShape getRenderShape(BlockState state) {
|
||||
return RenderShape.ENTITYBLOCK_ANIMATED;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) {
|
||||
return ModBlockEntities.CONTAINER.get().create(blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
|
||||
return state.getFluidState().isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
||||
builder.add(FACING, WATERLOGGED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
||||
boolean flag = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER;
|
||||
return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(WATERLOGGED, flag);
|
||||
}
|
||||
|
||||
public BlockState rotate(BlockState state, Rotation rot) {
|
||||
return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
|
||||
}
|
||||
|
||||
public BlockState mirror(BlockState state, Mirror mirrorIn) {
|
||||
return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidState getFluidState(BlockState state) {
|
||||
return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
|
||||
}
|
||||
return super.updateShape(state, facing, facingState, world, currentPos, facingPos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemStack> getDrops(BlockState state, LootParams.Builder builder) {
|
||||
List<ItemStack> dropsOriginal = super.getDrops(state, builder);
|
||||
if (!dropsOriginal.isEmpty())
|
||||
return dropsOriginal;
|
||||
return Collections.singletonList(new ItemStack(this, 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlacedBy(Level level, BlockPos pos, BlockState blockstate, LivingEntity entity, ItemStack itemstack) {
|
||||
super.setPlacedBy(level, pos, blockstate, entity, itemstack);
|
||||
ModUtils.queueServerWork(18, () -> {
|
||||
if (!level.isClientSide())
|
||||
level.explode(null, pos.getX(), pos.getY() + 1, pos.getZ(), 0, Level.ExplosionInteraction.NONE);
|
||||
if (level instanceof ServerLevel serverLevel) {
|
||||
ParticleTool.sendParticle(serverLevel, ParticleTypes.EXPLOSION, pos.getX(), pos.getY() + 1, pos.getZ(), 40, 1.5, 1.5, 1.5, 1, false);
|
||||
}
|
||||
});
|
||||
ModUtils.queueServerWork(20, () -> {
|
||||
level.setBlock(BlockPos.containing(pos.getX(), pos.getY(), pos.getZ()), Blocks.AIR.defaultBlockState(), 3);
|
||||
if (level instanceof ServerLevel _level) {
|
||||
Entity entityToSpawn = ModEntities.MK_42.get().spawn(_level, BlockPos.containing(pos.getX(), pos.getY(), pos.getZ()), MobSpawnType.MOB_SUMMONED);
|
||||
if (entityToSpawn != null) {
|
||||
entityToSpawn.setYRot(level.getRandom().nextFloat() * 360F);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
package com.atsuishio.superbwarfare.block.display;
|
||||
|
||||
import com.atsuishio.superbwarfare.block.renderer.ContainerDisplayItemRenderer;
|
||||
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
|
||||
import software.bernie.geckolib.animatable.GeoItem;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class ContainerDisplayItem extends BlockItem implements GeoItem {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
|
||||
public ContainerDisplayItem(Block block, Properties settings) {
|
||||
super(block, settings);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||
super.initializeClient(consumer);
|
||||
consumer.accept(new IClientItemExtensions() {
|
||||
private final BlockEntityWithoutLevelRenderer renderer = new ContainerDisplayItemRenderer();
|
||||
|
||||
@Override
|
||||
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
|
||||
return renderer;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController(this, "controller", 0, this::predicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
package com.atsuishio.superbwarfare.block.entity;
|
||||
|
||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
|
||||
import net.minecraft.world.ContainerHelper;
|
||||
import net.minecraft.world.WorldlyContainer;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraft.world.inventory.ChestMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.wrapper.SidedInvWrapper;
|
||||
import software.bernie.geckolib.animatable.GeoBlockEntity;
|
||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||
import software.bernie.geckolib.core.animation.AnimationController;
|
||||
import software.bernie.geckolib.core.animation.AnimationState;
|
||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class ContainerTileEntity extends RandomizableContainerBlockEntity implements GeoBlockEntity, WorldlyContainer {
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(9, ItemStack.EMPTY);
|
||||
private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
|
||||
|
||||
public ContainerTileEntity(BlockPos pos, BlockState state) {
|
||||
super(ModBlockEntities.CONTAINER.get(), pos, state);
|
||||
}
|
||||
|
||||
private PlayState predicate(AnimationState event) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.container.open"));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController<ContainerTileEntity>(this, "controller", 0, this::predicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||
return this.cache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(CompoundTag compound) {
|
||||
super.load(compound);
|
||||
if (!this.tryLoadLootTable(compound))
|
||||
this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
|
||||
ContainerHelper.loadAllItems(compound, this.stacks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveAdditional(CompoundTag compound) {
|
||||
super.saveAdditional(compound);
|
||||
if (!this.trySaveLootTable(compound)) {
|
||||
ContainerHelper.saveAllItems(compound, this.stacks);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientboundBlockEntityDataPacket getUpdatePacket() {
|
||||
return ClientboundBlockEntityDataPacket.create(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundTag getUpdateTag() {
|
||||
return this.saveWithFullMetadata();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getContainerSize() {
|
||||
return stacks.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
for (ItemStack itemstack : this.stacks)
|
||||
if (!itemstack.isEmpty())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getDefaultName() {
|
||||
return Component.literal("container");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxStackSize() {
|
||||
return 64;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbstractContainerMenu createMenu(int id, Inventory inventory) {
|
||||
return ChestMenu.threeRows(id, inventory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getDisplayName() {
|
||||
return Component.literal("Container");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NonNullList<ItemStack> getItems() {
|
||||
return this.stacks;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setItems(NonNullList<ItemStack> stacks) {
|
||||
this.stacks = stacks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceItem(int index, ItemStack stack) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getSlotsForFace(Direction side) {
|
||||
return IntStream.range(0, this.getContainerSize()).toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
|
||||
return this.canPlaceItem(index, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
|
||||
if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
|
||||
return handlers[facing.ordinal()].cast();
|
||||
return super.getCapability(capability, facing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRemoved() {
|
||||
super.setRemoved();
|
||||
for (LazyOptional<? extends IItemHandler> handler : handlers)
|
||||
handler.invalidate();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.atsuishio.superbwarfare.block.listener;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.block.renderer.ContainerTileRenderer;
|
||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.client.event.EntityRenderersEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = ModUtils.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
public class ClientListener {
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@SubscribeEvent
|
||||
public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
|
||||
event.registerBlockEntityRenderer(ModBlockEntities.CONTAINER.get(), context -> new ContainerTileRenderer());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.atsuishio.superbwarfare.block.model;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.block.entity.ContainerTileEntity;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
public class ContainerBlockModel extends GeoModel<ContainerTileEntity> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(ContainerTileEntity animatable) {
|
||||
return ModUtils.loc("animations/container.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(ContainerTileEntity animatable) {
|
||||
return ModUtils.loc( "geo/container.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(ContainerTileEntity animatable) {
|
||||
return ModUtils.loc( "textures/block/container.png");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.atsuishio.superbwarfare.block.model;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.block.display.ContainerDisplayItem;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
public class ContainerDisplayModel extends GeoModel<ContainerDisplayItem> {
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(ContainerDisplayItem animatable) {
|
||||
return ModUtils.loc( "animations/container.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(ContainerDisplayItem animatable) {
|
||||
return ModUtils.loc("geo/container.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(ContainerDisplayItem entity) {
|
||||
return ModUtils.loc("textures/block/container.png");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.atsuishio.superbwarfare.block.renderer;
|
||||
|
||||
import com.atsuishio.superbwarfare.block.display.ContainerDisplayItem;
|
||||
import com.atsuishio.superbwarfare.block.model.ContainerDisplayModel;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import software.bernie.geckolib.renderer.GeoItemRenderer;
|
||||
|
||||
public class ContainerDisplayItemRenderer extends GeoItemRenderer<ContainerDisplayItem> {
|
||||
public ContainerDisplayItemRenderer() {
|
||||
super(new ContainerDisplayModel());
|
||||
}
|
||||
|
||||
@Override
|
||||
public RenderType getRenderType(ContainerDisplayItem animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
|
||||
return RenderType.entityTranslucent(getTextureLocation(animatable));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.atsuishio.superbwarfare.block.renderer;
|
||||
|
||||
import com.atsuishio.superbwarfare.block.entity.ContainerTileEntity;
|
||||
import com.atsuishio.superbwarfare.block.model.ContainerBlockModel;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import software.bernie.geckolib.renderer.GeoBlockRenderer;
|
||||
|
||||
public class ContainerTileRenderer extends GeoBlockRenderer<ContainerTileEntity> {
|
||||
public ContainerTileRenderer() {
|
||||
super(new ContainerBlockModel());
|
||||
}
|
||||
|
||||
@Override
|
||||
public RenderType getRenderType(ContainerTileEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
|
||||
return RenderType.entityTranslucent(getTextureLocation(animatable));
|
||||
}
|
||||
}
|
|
@ -116,7 +116,7 @@ public class ClickHandler {
|
|||
|
||||
if (player.getMainHandItem().is(ModTags.Items.GUN)
|
||||
|| stack.is(ModItems.MONITOR.get())
|
||||
|| (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem)
|
||||
|| (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && !player.getMainHandItem().is(ModTags.Items.GUN))
|
||||
|| (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get()))) {
|
||||
if (button == ModKeyMappings.FIRE.getKey().getValue()) {
|
||||
handleWeaponFirePress(player, stack);
|
||||
|
@ -237,7 +237,7 @@ public class ClickHandler {
|
|||
|
||||
if (player.getMainHandItem().is(ModTags.Items.GUN)
|
||||
|| stack.is(ModItems.MONITOR.get())
|
||||
|| (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem)
|
||||
|| (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && !player.getMainHandItem().is(ModTags.Items.GUN))
|
||||
|| (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get()))) {
|
||||
if (key == ModKeyMappings.FIRE.getKey().getValue()) {
|
||||
handleWeaponFirePress(player, stack);
|
||||
|
|
|
@ -6,9 +6,6 @@ import net.minecraft.core.BlockPos;
|
|||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||
import net.minecraft.network.syncher.EntityDataSerializers;
|
||||
import net.minecraft.network.syncher.SynchedEntityData;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.*;
|
||||
|
@ -38,12 +35,8 @@ import software.bernie.geckolib.core.object.PlayState;
|
|||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
public class SenpaiEntity extends Monster implements GeoEntity, AnimatedEntity {
|
||||
|
||||
public static final EntityDataAccessor<String> ANIMATION = SynchedEntityData.defineId(SenpaiEntity.class, EntityDataSerializers.STRING);
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
|
||||
public String animationProcedure = "empty";
|
||||
|
||||
public SenpaiEntity(PlayMessages.SpawnEntity packet, Level world) {
|
||||
this(ModEntities.SENPAI.get(), world);
|
||||
}
|
||||
|
@ -57,7 +50,6 @@ public class SenpaiEntity extends Monster implements GeoEntity, AnimatedEntity {
|
|||
@Override
|
||||
protected void defineSynchedData() {
|
||||
super.defineSynchedData();
|
||||
this.entityData.define(ANIMATION, "undefined");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -162,34 +154,16 @@ public class SenpaiEntity extends Monster implements GeoEntity, AnimatedEntity {
|
|||
}
|
||||
|
||||
private PlayState movementPredicate(AnimationState<SenpaiEntity> event) {
|
||||
if (this.animationProcedure.equals("empty")) {
|
||||
if ((event.isMoving() || !(event.getLimbSwingAmount() > -0.15F && event.getLimbSwingAmount() < 0.15F))
|
||||
|
||||
&& !this.isAggressive()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.senpai.walk"));
|
||||
}
|
||||
if (this.isDeadOrDying()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.senpai.die"));
|
||||
}
|
||||
if (this.isAggressive() && event.isMoving()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.senpai.run"));
|
||||
}
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.senpai.idle"));
|
||||
if ((event.isMoving() || !(event.getLimbSwingAmount() > -0.15F && event.getLimbSwingAmount() < 0.15F)) && !this.isAggressive()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.senpai.walk"));
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
private PlayState procedurePredicate(AnimationState<SenpaiEntity> event) {
|
||||
if (!animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationProcedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
} else if (animationProcedure.equals("empty")) {
|
||||
return PlayState.STOP;
|
||||
if (this.isDeadOrDying()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.senpai.die"));
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
if (this.isAggressive() && event.isMoving()) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.senpai.run"));
|
||||
}
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.senpai.idle"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -207,22 +181,19 @@ public class SenpaiEntity extends Monster implements GeoEntity, AnimatedEntity {
|
|||
}
|
||||
|
||||
public String getSyncedAnimation() {
|
||||
return this.entityData.get(ANIMATION);
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setAnimation(String animation) {
|
||||
this.entityData.set(ANIMATION, animation);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAnimationProcedure(String procedure) {
|
||||
this.animationProcedure = procedure;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
data.add(new AnimationController<>(this, "movement", 4, this::movementPredicate));
|
||||
data.add(new AnimationController<>(this, "procedure", 4, this::procedurePredicate));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
/*
|
||||
* MCreator note: This file will be REGENERATED on each build.
|
||||
*/
|
||||
package com.atsuishio.superbwarfare.init;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.block.entity.ContainerTileEntity;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
|
||||
public class ModBlockEntities {
|
||||
public static final DeferredRegister<BlockEntityType<?>> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ModUtils.MODID);
|
||||
public static final RegistryObject<BlockEntityType<ContainerTileEntity>> CONTAINER = REGISTRY.register("container", () -> BlockEntityType.Builder.of(ContainerTileEntity::new, ModBlocks.CONTAINER.get()).build(null));
|
||||
|
||||
private static RegistryObject<BlockEntityType<?>> register(String registryname, RegistryObject<Block> block, BlockEntityType.BlockEntitySupplier<?> supplier) {
|
||||
return REGISTRY.register(registryname, () -> BlockEntityType.Builder.of(supplier, block.get()).build(null));
|
||||
}
|
||||
}
|
|
@ -27,4 +27,5 @@ public class ModBlocks {
|
|||
public static final RegistryObject<Block> TUNGSTEN_BLOCK = REGISTRY.register("tungsten_block", TungstenBlock::new);
|
||||
public static final RegistryObject<Block> SILVER_BLOCK = REGISTRY.register("silver_block", SilverBlock::new);
|
||||
public static final RegistryObject<Block> CEMENTED_CARBIDE_BLOCK = REGISTRY.register("cemented_carbide_block", CementedCarbideBlock::new);
|
||||
public static final RegistryObject<Block> CONTAINER = REGISTRY.register("container", ContainerBlock::new);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.atsuishio.superbwarfare.init;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.block.display.ContainerDisplayItem;
|
||||
import com.atsuishio.superbwarfare.item.*;
|
||||
import com.atsuishio.superbwarfare.item.armor.*;
|
||||
import com.atsuishio.superbwarfare.item.common.BlueprintItem;
|
||||
|
@ -110,6 +111,7 @@ public class ModItems {
|
|||
*/
|
||||
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ModUtils.MODID);
|
||||
|
||||
public static final RegistryObject<Item> CONTAINER = ITEMS.register(ModBlocks.CONTAINER.getId().getPath(), () -> new ContainerDisplayItem(ModBlocks.CONTAINER.get(), new Item.Properties()));
|
||||
public static final RegistryObject<Item> SENPAI_SPAWN_EGG = ITEMS.register("senpai_spawn_egg", () -> new ForgeSpawnEggItem(ModEntities.SENPAI, -11584987, -14014413, new Item.Properties()));
|
||||
public static final RegistryObject<Item> ANCIENT_CPU = ITEMS.register("ancient_cpu", () -> new Item(new Item.Properties().rarity(Rarity.RARE)));
|
||||
public static final RegistryObject<Item> PROPELLER = ITEMS.register("propeller", () -> new Item(new Item.Properties()));
|
||||
|
@ -122,6 +124,7 @@ public class ModItems {
|
|||
public static final RegistryObject<Item> HAMMER = ITEMS.register("hammer", Hammer::new);
|
||||
public static final RegistryObject<Item> CROWBAR = ITEMS.register("crowbar", Crowbar::new);
|
||||
public static final RegistryObject<Item> ARMOR_PLATE = ITEMS.register("armor_plate", ArmorPlate::new);
|
||||
|
||||
public static final RegistryObject<Item> RU_HELMET_6B47 = ITEMS.register("ru_helmet_6b47", RuHelmet6b47::new);
|
||||
public static final RegistryObject<Item> RU_CHEST_6B43 = ITEMS.register("ru_chest_6b43", RuChest6b43::new);
|
||||
public static final RegistryObject<Item> US_HELMET_PASTG = ITEMS.register("us_helmet_pastg", UsHelmetPastg::new);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.atsuishio.superbwarfare.init;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.item.ArmorPlate;
|
||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock17Item;
|
||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock18Item;
|
||||
import com.atsuishio.superbwarfare.item.gun.handgun.M1911Item;
|
||||
|
@ -8,6 +9,7 @@ import com.atsuishio.superbwarfare.item.gun.handgun.Trachelium;
|
|||
import com.atsuishio.superbwarfare.item.gun.launcher.JavelinItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.launcher.M79Item;
|
||||
import com.atsuishio.superbwarfare.item.gun.launcher.RpgItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.machinegun.DevotionItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.machinegun.M60Item;
|
||||
import com.atsuishio.superbwarfare.item.gun.machinegun.MinigunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.machinegun.RpkItem;
|
||||
|
@ -19,8 +21,6 @@ import com.atsuishio.superbwarfare.item.gun.smg.VectorItem;
|
|||
import com.atsuishio.superbwarfare.item.gun.sniper.*;
|
||||
import com.atsuishio.superbwarfare.item.gun.special.BocekItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.special.TaserItem;
|
||||
import com.atsuishio.superbwarfare.item.ArmorPlate;
|
||||
import com.atsuishio.superbwarfare.item.gun.machinegun.DevotionItem;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
|
@ -105,6 +105,7 @@ public class ModTabs {
|
|||
if (registryObject.get() == ModItems.ARMOR_PLATE.get()) {
|
||||
output.accept(ArmorPlate.getInfiniteInstance());
|
||||
}
|
||||
|
||||
}))
|
||||
.build());
|
||||
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
"animation.container.open": {
|
||||
"loop": "hold_on_last_frame",
|
||||
"animation_length": 1,
|
||||
"bones": {
|
||||
"front": {
|
||||
"rotation": {
|
||||
"0.5": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.7583": {
|
||||
"vector": [92, 0, 0],
|
||||
"easing": "easeInSine"
|
||||
},
|
||||
"0.85": {
|
||||
"vector": [89.09, 0, 0]
|
||||
},
|
||||
"0.9083": {
|
||||
"vector": [92, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"back": {
|
||||
"rotation": {
|
||||
"0.5": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.7583": {
|
||||
"vector": [-92, 0, 0],
|
||||
"easing": "easeInSine"
|
||||
},
|
||||
"0.85": {
|
||||
"vector": [-89.09, 0, 0]
|
||||
},
|
||||
"0.9083": {
|
||||
"vector": [-92, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"leftr": {
|
||||
"rotation": {
|
||||
"0.4417": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.6583": {
|
||||
"vector": [0, -90, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"leftl": {
|
||||
"rotation": {
|
||||
"0.4417": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.6583": {
|
||||
"vector": [0, 90, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"rightr": {
|
||||
"rotation": {
|
||||
"0.4417": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.6583": {
|
||||
"vector": [0, -90, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"rightl": {
|
||||
"rotation": {
|
||||
"0.4417": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.6583": {
|
||||
"vector": [0, 90, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"topb": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.2": {
|
||||
"vector": [90, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"topt": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.2": {
|
||||
"vector": [-90, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"topf": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.2": {
|
||||
"vector": [-90, 0, 0]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"geckolib_format_version": 2
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north": {
|
||||
"model": "superbwarfare:custom/container_particle"
|
||||
},
|
||||
"facing=east": {
|
||||
"model": "superbwarfare:custom/container_particle",
|
||||
"y": 90
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "superbwarfare:custom/container_particle",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "superbwarfare:custom/container_particle",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
924
src/main/resources/assets/superbwarfare/geo/container.geo.json
Normal file
924
src/main/resources/assets/superbwarfare/geo/container.geo.json
Normal file
|
@ -0,0 +1,924 @@
|
|||
{
|
||||
"format_version": "1.12.0",
|
||||
"minecraft:geometry": [
|
||||
{
|
||||
"description": {
|
||||
"identifier": "geometry.unknown",
|
||||
"texture_width": 128,
|
||||
"texture_height": 128,
|
||||
"visible_bounds_width": 5,
|
||||
"visible_bounds_height": 1.5,
|
||||
"visible_bounds_offset": [0, 0.25, 0]
|
||||
},
|
||||
"bones": [
|
||||
{
|
||||
"name": "bone",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "front",
|
||||
"parent": "bone",
|
||||
"pivot": [-9, 0.75, -7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-8, 1, -8],
|
||||
"size": [16, 1, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 12], "uv_size": [16, 1]},
|
||||
"east": {"uv": [12, 32], "uv_size": [1, 1]},
|
||||
"south": {"uv": [44, 13], "uv_size": [16, 1]},
|
||||
"west": {"uv": [13, 32], "uv_size": [1, 1]},
|
||||
"up": {"uv": [44, 14], "uv_size": [16, 1]},
|
||||
"down": {"uv": [44, 16], "uv_size": [16, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 14, -8],
|
||||
"size": [16, 1, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 16], "uv_size": [16, 1]},
|
||||
"east": {"uv": [14, 32], "uv_size": [1, 1]},
|
||||
"south": {"uv": [44, 17], "uv_size": [16, 1]},
|
||||
"west": {"uv": [15, 32], "uv_size": [1, 1]},
|
||||
"up": {"uv": [44, 18], "uv_size": [16, 1]},
|
||||
"down": {"uv": [44, 20], "uv_size": [16, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [6.5, 2, -8],
|
||||
"size": [1.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [15, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [16, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [17, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [18, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, -8],
|
||||
"size": [1.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [42, 12], "uv_size": [2, 12]},
|
||||
"east": {"uv": [19, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [42, 24], "uv_size": [2, 12]},
|
||||
"west": {"uv": [20, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 2, -7.6],
|
||||
"size": [13, 12, 0.1],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 0], "uv_size": [13, 12]},
|
||||
"south": {"uv": [16, 12], "uv_size": [13, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.5, 2, -8],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"north": {"uv": [36, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [37, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [38, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2.5, 2, -8],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"north": {"uv": [33, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [34, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [35, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 2, -8],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"north": {"uv": [30, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [31, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [32, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.5, 2, -8],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"north": {"uv": [27, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [28, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [29, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.5, 2, -8],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"north": {"uv": [24, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [25, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [26, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.5, 2, -8],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"north": {"uv": [21, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [22, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [23, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leftr",
|
||||
"parent": "front",
|
||||
"pivot": [-7.75, 2, -7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-8, 2, -7.5],
|
||||
"size": [0.5, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [39, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [40, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [41, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [42, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, -0.5],
|
||||
"size": [0.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [43, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [44, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [45, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [46, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 14, -7.5],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [12, 34], "uv_size": [1, 1]},
|
||||
"east": {"uv": [2, 44], "uv_size": [8, 1]},
|
||||
"south": {"uv": [13, 34], "uv_size": [1, 1]},
|
||||
"west": {"uv": [2, 45], "uv_size": [8, 1]},
|
||||
"up": {"uv": [62, 48], "uv_size": [1, 8]},
|
||||
"down": {"uv": [62, 64], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 1, -7.5],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 34], "uv_size": [1, 1]},
|
||||
"east": {"uv": [2, 46], "uv_size": [8, 1]},
|
||||
"south": {"uv": [15, 34], "uv_size": [1, 1]},
|
||||
"west": {"uv": [2, 47], "uv_size": [8, 1]},
|
||||
"up": {"uv": [63, 0], "uv_size": [1, 8]},
|
||||
"down": {"uv": [63, 16], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.5, 2, -6.5],
|
||||
"size": [0, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"east": {"uv": [47, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"west": {"uv": [48, 48], "uv_size": [1, 12]},
|
||||
"up": {"uv": [0, 0], "uv_size": [0, 1]},
|
||||
"down": {"uv": [0, 1], "uv_size": [0, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.6, 2, -6],
|
||||
"size": [0.1, 12, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [0, 32], "uv_size": [6, 12]},
|
||||
"west": {"uv": [6, 32], "uv_size": [6, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, -6],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [2, 49], "uv_size": [1, 12]},
|
||||
"east": {"uv": [3, 49], "uv_size": [1, 12]},
|
||||
"south": {"uv": [4, 49], "uv_size": [1, 12]},
|
||||
"west": {"uv": [5, 49], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, -4],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [6, 49], "uv_size": [1, 12]},
|
||||
"east": {"uv": [7, 49], "uv_size": [1, 12]},
|
||||
"south": {"uv": [8, 49], "uv_size": [1, 12]},
|
||||
"west": {"uv": [9, 49], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, -2],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [10, 49], "uv_size": [1, 12]},
|
||||
"east": {"uv": [11, 49], "uv_size": [1, 12]},
|
||||
"south": {"uv": [12, 49], "uv_size": [1, 12]},
|
||||
"west": {"uv": [13, 49], "uv_size": [1, 12]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "rightl",
|
||||
"parent": "front",
|
||||
"pivot": [7.75, 2, -7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [7.5, 2, -7.5],
|
||||
"size": [0.5, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 49], "uv_size": [1, 12]},
|
||||
"east": {"uv": [49, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [50, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [51, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 2, -0.5],
|
||||
"size": [0.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [52, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [53, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [54, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [55, 48], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 14, -7.5],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [10, 44], "uv_size": [1, 1]},
|
||||
"east": {"uv": [48, 11], "uv_size": [8, 1]},
|
||||
"south": {"uv": [11, 44], "uv_size": [1, 1]},
|
||||
"west": {"uv": [63, 48], "uv_size": [8, 1]},
|
||||
"up": {"uv": [63, 49], "uv_size": [1, 8]},
|
||||
"down": {"uv": [63, 65], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 1, -7.5],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [10, 45], "uv_size": [1, 1]},
|
||||
"east": {"uv": [64, 0], "uv_size": [8, 1]},
|
||||
"south": {"uv": [11, 45], "uv_size": [1, 1]},
|
||||
"west": {"uv": [64, 1], "uv_size": [8, 1]},
|
||||
"up": {"uv": [64, 2], "uv_size": [1, 8]},
|
||||
"down": {"uv": [64, 18], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 2, -6.5],
|
||||
"size": [0, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"east": {"uv": [0, 56], "uv_size": [1, 12]},
|
||||
"south": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"west": {"uv": [1, 56], "uv_size": [1, 12]},
|
||||
"up": {"uv": [0, 0], "uv_size": [0, 1]},
|
||||
"down": {"uv": [0, 1], "uv_size": [0, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 2, -6],
|
||||
"size": [0.1, 12, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [12, 36], "uv_size": [6, 12]},
|
||||
"west": {"uv": [18, 36], "uv_size": [6, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.6, 2, -6],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [56, 48], "uv_size": [1, 12]},
|
||||
"east": {"uv": [57, 36], "uv_size": [1, 12]},
|
||||
"south": {"uv": [57, 48], "uv_size": [1, 12]},
|
||||
"west": {"uv": [58, 32], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.6, 2, -4],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [58, 44], "uv_size": [1, 12]},
|
||||
"east": {"uv": [58, 56], "uv_size": [1, 12]},
|
||||
"south": {"uv": [59, 32], "uv_size": [1, 12]},
|
||||
"west": {"uv": [59, 44], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.6, 2, -2],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [59, 56], "uv_size": [1, 12]},
|
||||
"east": {"uv": [60, 7], "uv_size": [1, 12]},
|
||||
"south": {"uv": [15, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [16, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "topb",
|
||||
"parent": "front",
|
||||
"pivot": [-5.5, 14.75, -7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [6.5, 14.5, -7.5],
|
||||
"size": [1, 0.5, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [12, 35], "uv_size": [1, 1]},
|
||||
"east": {"uv": [48, 7], "uv_size": [8, 1]},
|
||||
"south": {"uv": [13, 35], "uv_size": [1, 1]},
|
||||
"west": {"uv": [48, 8], "uv_size": [8, 1]},
|
||||
"up": {"uv": [63, 16], "uv_size": [1, 8]},
|
||||
"down": {"uv": [63, 32], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.5, 14.5, -7.5],
|
||||
"size": [1, 0.5, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [14, 35], "uv_size": [1, 1]},
|
||||
"east": {"uv": [48, 9], "uv_size": [8, 1]},
|
||||
"south": {"uv": [15, 35], "uv_size": [1, 1]},
|
||||
"west": {"uv": [48, 10], "uv_size": [8, 1]},
|
||||
"up": {"uv": [63, 32], "uv_size": [1, 8]},
|
||||
"down": {"uv": [63, 48], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 14.5, -7.5],
|
||||
"size": [13, 0.5, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 42], "uv_size": [13, 1]},
|
||||
"south": {"uv": [44, 43], "uv_size": [13, 1]},
|
||||
"up": {"uv": [44, 44], "uv_size": [13, 1]},
|
||||
"down": {"uv": [44, 46], "uv_size": [13, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 14.5, -1],
|
||||
"size": [13, 0.5, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 36], "uv_size": [13, 1]},
|
||||
"south": {"uv": [44, 37], "uv_size": [13, 1]},
|
||||
"up": {"uv": [44, 38], "uv_size": [13, 1]},
|
||||
"down": {"uv": [44, 40], "uv_size": [13, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 14.5, -6.5],
|
||||
"size": [13, 0.1, 5.5],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 40], "uv_size": [13, 1]},
|
||||
"east": {"uv": [65, 16], "uv_size": [6, 1]},
|
||||
"south": {"uv": [44, 41], "uv_size": [13, 1]},
|
||||
"west": {"uv": [65, 17], "uv_size": [6, 1]},
|
||||
"up": {"uv": [29, 12], "uv_size": [13, 6]},
|
||||
"down": {"uv": [29, 24], "uv_size": [13, -6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.5, 14.6, -6.5],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [63, 65], "uv_size": [6, 1]},
|
||||
"west": {"uv": [66, 4], "uv_size": [6, 1]},
|
||||
"up": {"uv": [66, 5], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2.5, 14.6, -6.5],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [66, 11], "uv_size": [6, 1]},
|
||||
"west": {"uv": [66, 20], "uv_size": [6, 1]},
|
||||
"up": {"uv": [66, 21], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 14.6, -6.5],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [66, 27], "uv_size": [6, 1]},
|
||||
"west": {"uv": [66, 28], "uv_size": [6, 1]},
|
||||
"up": {"uv": [66, 29], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.5, 14.6, -6.5],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [66, 35], "uv_size": [6, 1]},
|
||||
"west": {"uv": [66, 38], "uv_size": [6, 1]},
|
||||
"up": {"uv": [66, 39], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.5, 14.6, -6.5],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [66, 45], "uv_size": [6, 1]},
|
||||
"west": {"uv": [66, 49], "uv_size": [6, 1]},
|
||||
"up": {"uv": [66, 50], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.5, 14.6, -6.5],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [66, 56], "uv_size": [6, 1]},
|
||||
"west": {"uv": [66, 57], "uv_size": [6, 1]},
|
||||
"up": {"uv": [66, 58], "uv_size": [1, 6]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "back",
|
||||
"parent": "bone",
|
||||
"pivot": [-9, 0.75, 7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-8, 1, 7.5],
|
||||
"size": [16, 1, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 24], "uv_size": [16, 1]},
|
||||
"east": {"uv": [57, 10], "uv_size": [1, 1]},
|
||||
"south": {"uv": [44, 25], "uv_size": [16, 1]},
|
||||
"west": {"uv": [57, 11], "uv_size": [1, 1]},
|
||||
"up": {"uv": [44, 26], "uv_size": [16, 1]},
|
||||
"down": {"uv": [44, 28], "uv_size": [16, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 14, 7.5],
|
||||
"size": [16, 1, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 28], "uv_size": [16, 1]},
|
||||
"east": {"uv": [58, 7], "uv_size": [1, 1]},
|
||||
"south": {"uv": [44, 29], "uv_size": [16, 1]},
|
||||
"west": {"uv": [58, 8], "uv_size": [1, 1]},
|
||||
"up": {"uv": [44, 30], "uv_size": [16, 1]},
|
||||
"down": {"uv": [44, 32], "uv_size": [16, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [6.5, 2, 7.5],
|
||||
"size": [1.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [57, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [61, 0], "uv_size": [1, 12]},
|
||||
"south": {"uv": [2, 61], "uv_size": [1, 12]},
|
||||
"west": {"uv": [3, 61], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, 7.5],
|
||||
"size": [1.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [42, 36], "uv_size": [2, 12]},
|
||||
"east": {"uv": [4, 61], "uv_size": [1, 12]},
|
||||
"south": {"uv": [0, 44], "uv_size": [2, 12]},
|
||||
"west": {"uv": [5, 61], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 2, 7.5],
|
||||
"size": [13, 12, 0.1],
|
||||
"uv": {
|
||||
"north": {"uv": [16, 24], "uv_size": [13, 12]},
|
||||
"south": {"uv": [29, 0], "uv_size": [13, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.5, 2, 7.6],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"east": {"uv": [6, 61], "uv_size": [1, 12]},
|
||||
"south": {"uv": [7, 61], "uv_size": [1, 12]},
|
||||
"west": {"uv": [8, 61], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2.5, 2, 7.6],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"east": {"uv": [9, 61], "uv_size": [1, 12]},
|
||||
"south": {"uv": [10, 61], "uv_size": [1, 12]},
|
||||
"west": {"uv": [11, 61], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 2, 7.6],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"east": {"uv": [12, 61], "uv_size": [1, 12]},
|
||||
"south": {"uv": [61, 12], "uv_size": [1, 12]},
|
||||
"west": {"uv": [13, 61], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.5, 2, 7.6],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"east": {"uv": [14, 61], "uv_size": [1, 12]},
|
||||
"south": {"uv": [61, 24], "uv_size": [1, 12]},
|
||||
"west": {"uv": [61, 36], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.5, 2, 7.6],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"east": {"uv": [61, 48], "uv_size": [1, 12]},
|
||||
"south": {"uv": [61, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [62, 0], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.5, 2, 7.6],
|
||||
"size": [1, 12, 0.4],
|
||||
"uv": {
|
||||
"east": {"uv": [62, 12], "uv_size": [1, 12]},
|
||||
"south": {"uv": [62, 24], "uv_size": [1, 12]},
|
||||
"west": {"uv": [62, 36], "uv_size": [1, 12]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "rightr",
|
||||
"parent": "back",
|
||||
"pivot": [7.75, 2, 7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [7.5, 2, 6.5],
|
||||
"size": [0.5, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [17, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [18, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [19, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [60, 19], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 2, 0],
|
||||
"size": [0.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [20, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [21, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [22, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [23, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 14, 0],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [10, 46], "uv_size": [1, 1]},
|
||||
"east": {"uv": [64, 18], "uv_size": [8, 1]},
|
||||
"south": {"uv": [11, 46], "uv_size": [1, 1]},
|
||||
"west": {"uv": [64, 19], "uv_size": [8, 1]},
|
||||
"up": {"uv": [64, 20], "uv_size": [1, 8]},
|
||||
"down": {"uv": [64, 36], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 1, 0],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [10, 47], "uv_size": [1, 1]},
|
||||
"east": {"uv": [64, 36], "uv_size": [8, 1]},
|
||||
"south": {"uv": [11, 47], "uv_size": [1, 1]},
|
||||
"west": {"uv": [64, 37], "uv_size": [8, 1]},
|
||||
"up": {"uv": [64, 38], "uv_size": [1, 8]},
|
||||
"down": {"uv": [64, 57], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 2, 6],
|
||||
"size": [0, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"east": {"uv": [24, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"west": {"uv": [25, 60], "uv_size": [1, 12]},
|
||||
"up": {"uv": [0, 0], "uv_size": [0, 1]},
|
||||
"down": {"uv": [0, 1], "uv_size": [0, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.5, 2, 0.5],
|
||||
"size": [0.1, 12, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [24, 36], "uv_size": [6, 12]},
|
||||
"west": {"uv": [30, 36], "uv_size": [6, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.6, 2, 5],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [26, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [27, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [28, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [29, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.6, 2, 3],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [30, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [31, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [60, 31], "uv_size": [1, 12]},
|
||||
"west": {"uv": [32, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [7.6, 2, 1],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [33, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [34, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [35, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [36, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leftl",
|
||||
"parent": "back",
|
||||
"pivot": [-7.75, 2, 7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-8, 2, 6.5],
|
||||
"size": [0.5, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [37, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [38, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [39, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [40, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, 0],
|
||||
"size": [0.5, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [41, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [42, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [43, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [60, 43], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 14, 0],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [56, 7], "uv_size": [1, 1]},
|
||||
"east": {"uv": [64, 46], "uv_size": [8, 1]},
|
||||
"south": {"uv": [56, 8], "uv_size": [1, 1]},
|
||||
"west": {"uv": [64, 47], "uv_size": [8, 1]},
|
||||
"up": {"uv": [64, 57], "uv_size": [1, 8]},
|
||||
"down": {"uv": [62, 72], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 1, 0],
|
||||
"size": [0.5, 1, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [56, 9], "uv_size": [1, 1]},
|
||||
"east": {"uv": [65, 2], "uv_size": [8, 1]},
|
||||
"south": {"uv": [56, 10], "uv_size": [1, 1]},
|
||||
"west": {"uv": [65, 3], "uv_size": [8, 1]},
|
||||
"up": {"uv": [65, 4], "uv_size": [1, 8]},
|
||||
"down": {"uv": [65, 28], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.5, 2, 6],
|
||||
"size": [0, 12, 0.5],
|
||||
"uv": {
|
||||
"north": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"east": {"uv": [44, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [0, 0], "uv_size": [0, 12]},
|
||||
"west": {"uv": [45, 60], "uv_size": [1, 12]},
|
||||
"up": {"uv": [0, 0], "uv_size": [0, 1]},
|
||||
"down": {"uv": [0, 1], "uv_size": [0, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.6, 2, 0.5],
|
||||
"size": [0.1, 12, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [36, 36], "uv_size": [6, 12]},
|
||||
"west": {"uv": [42, 0], "uv_size": [6, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, 5],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [46, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [47, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [48, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [49, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, 3],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [50, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [51, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [52, 60], "uv_size": [1, 12]},
|
||||
"west": {"uv": [53, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-8, 2, 1],
|
||||
"size": [0.4, 12, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [54, 60], "uv_size": [1, 12]},
|
||||
"east": {"uv": [55, 60], "uv_size": [1, 12]},
|
||||
"south": {"uv": [60, 55], "uv_size": [1, 12]},
|
||||
"west": {"uv": [56, 60], "uv_size": [1, 12]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "topf",
|
||||
"parent": "back",
|
||||
"pivot": [-5.5, 14.75, 7.75],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [6.5, 14.5, 0],
|
||||
"size": [1, 0.5, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [56, 11], "uv_size": [1, 1]},
|
||||
"east": {"uv": [65, 12], "uv_size": [8, 1]},
|
||||
"south": {"uv": [57, 7], "uv_size": [1, 1]},
|
||||
"west": {"uv": [65, 13], "uv_size": [8, 1]},
|
||||
"up": {"uv": [65, 28], "uv_size": [1, 8]},
|
||||
"down": {"uv": [65, 46], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.5, 14.5, 0],
|
||||
"size": [1, 0.5, 7.5],
|
||||
"uv": {
|
||||
"north": {"uv": [57, 8], "uv_size": [1, 1]},
|
||||
"east": {"uv": [65, 14], "uv_size": [8, 1]},
|
||||
"south": {"uv": [57, 9], "uv_size": [1, 1]},
|
||||
"west": {"uv": [65, 15], "uv_size": [8, 1]},
|
||||
"up": {"uv": [65, 49], "uv_size": [1, 8]},
|
||||
"down": {"uv": [65, 65], "uv_size": [1, -8]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 14.5, 6.5],
|
||||
"size": [13, 0.5, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 46], "uv_size": [13, 1]},
|
||||
"south": {"uv": [44, 47], "uv_size": [13, 1]},
|
||||
"up": {"uv": [48, 0], "uv_size": [13, 1]},
|
||||
"down": {"uv": [48, 2], "uv_size": [13, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 14.5, 0],
|
||||
"size": [13, 0.5, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [2, 48], "uv_size": [13, 1]},
|
||||
"south": {"uv": [48, 2], "uv_size": [13, 1]},
|
||||
"up": {"uv": [48, 3], "uv_size": [13, 1]},
|
||||
"down": {"uv": [48, 5], "uv_size": [13, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-6.5, 14.5, 1],
|
||||
"size": [13, 0.1, 5.5],
|
||||
"uv": {
|
||||
"north": {"uv": [48, 5], "uv_size": [13, 1]},
|
||||
"east": {"uv": [63, 66], "uv_size": [6, 1]},
|
||||
"south": {"uv": [48, 6], "uv_size": [13, 1]},
|
||||
"west": {"uv": [66, 64], "uv_size": [6, 1]},
|
||||
"up": {"uv": [29, 24], "uv_size": [13, 6]},
|
||||
"down": {"uv": [29, 36], "uv_size": [13, -6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [4.5, 14.6, 1],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [67, 5], "uv_size": [6, 1]},
|
||||
"west": {"uv": [67, 6], "uv_size": [6, 1]},
|
||||
"up": {"uv": [67, 21], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [2.5, 14.6, 1],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [67, 7], "uv_size": [6, 1]},
|
||||
"west": {"uv": [67, 8], "uv_size": [6, 1]},
|
||||
"up": {"uv": [67, 29], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [0.5, 14.6, 1],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [67, 9], "uv_size": [6, 1]},
|
||||
"west": {"uv": [67, 10], "uv_size": [6, 1]},
|
||||
"up": {"uv": [67, 39], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-1.5, 14.6, 1],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [67, 50], "uv_size": [6, 1]},
|
||||
"west": {"uv": [67, 51], "uv_size": [6, 1]},
|
||||
"up": {"uv": [67, 58], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-3.5, 14.6, 1],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [67, 52], "uv_size": [6, 1]},
|
||||
"west": {"uv": [67, 53], "uv_size": [6, 1]},
|
||||
"up": {"uv": [60, 67], "uv_size": [1, 6]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-5.5, 14.6, 1],
|
||||
"size": [1, 0.4, 5.5],
|
||||
"uv": {
|
||||
"east": {"uv": [67, 54], "uv_size": [6, 1]},
|
||||
"west": {"uv": [67, 55], "uv_size": [6, 1]},
|
||||
"up": {"uv": [63, 67], "uv_size": [1, 6]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bottom",
|
||||
"parent": "bone",
|
||||
"pivot": [6, 0, -7],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-8, 0.5, -8],
|
||||
"size": [16, 0.5, 16],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 20], "uv_size": [16, 1]},
|
||||
"east": {"uv": [44, 21], "uv_size": [16, 1]},
|
||||
"south": {"uv": [44, 22], "uv_size": [16, 1]},
|
||||
"west": {"uv": [44, 23], "uv_size": [16, 1]},
|
||||
"up": {"uv": [0, 0], "uv_size": [16, 16]},
|
||||
"down": {"uv": [0, 32], "uv_size": [16, -16]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7, 0, -8],
|
||||
"size": [14, 0.5, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 32], "uv_size": [14, 1]},
|
||||
"east": {"uv": [12, 33], "uv_size": [1, 1]},
|
||||
"west": {"uv": [13, 33], "uv_size": [1, 1]},
|
||||
"down": {"uv": [44, 34], "uv_size": [14, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7, 0, 7],
|
||||
"size": [14, 0.5, 1],
|
||||
"uv": {
|
||||
"north": {"uv": [44, 34], "uv_size": [14, 1]},
|
||||
"east": {"uv": [14, 33], "uv_size": [1, 1]},
|
||||
"west": {"uv": [15, 33], "uv_size": [1, 1]},
|
||||
"down": {"uv": [44, 36], "uv_size": [14, -1]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -149,6 +149,7 @@
|
|||
"item.superbwarfare.ap_5_inches": "AP Shell",
|
||||
"item.superbwarfare.javelin_missile": "Javelin Missile",
|
||||
|
||||
"block.superbwarfare.container": "Container",
|
||||
"item.superbwarfare.firing_parameters": "Firing Parameters",
|
||||
"item.superbwarfare.ancient_cpu": "Ancient CPU",
|
||||
"item.superbwarfare.target_deployer": "Target",
|
||||
|
|
|
@ -149,6 +149,7 @@
|
|||
"item.superbwarfare.ap_5_inches": "穿甲弹",
|
||||
"item.superbwarfare.javelin_missile": "标枪导弹",
|
||||
|
||||
"block.superbwarfare.container": "集装箱",
|
||||
"item.superbwarfare.firing_parameters": "射击诸元",
|
||||
"item.superbwarfare.ancient_cpu": "古代处理器",
|
||||
"item.superbwarfare.target_deployer": "标靶",
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
{
|
||||
"parent": "superbwarfare:displaysettings/container.item",
|
||||
"textures": {
|
||||
"particle": "superbwarfare:block/container"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,124 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "builtin/entity",
|
||||
"texture_size": [
|
||||
128,
|
||||
128
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [
|
||||
90,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"translation": [
|
||||
0,
|
||||
-2,
|
||||
-6
|
||||
],
|
||||
"scale": [
|
||||
0.4,
|
||||
0.4,
|
||||
0.4
|
||||
]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [
|
||||
90,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"translation": [
|
||||
0,
|
||||
-2,
|
||||
-6
|
||||
],
|
||||
"scale": [
|
||||
0.4,
|
||||
0.4,
|
||||
0.4
|
||||
]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [
|
||||
-176.35,
|
||||
27.92,
|
||||
-176.98
|
||||
],
|
||||
"translation": [
|
||||
-2,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"scale": [
|
||||
0.4,
|
||||
0.4,
|
||||
0.4
|
||||
]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [
|
||||
-176.35,
|
||||
27.92,
|
||||
-176.98
|
||||
],
|
||||
"translation": [
|
||||
-2,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"scale": [
|
||||
0.4,
|
||||
0.4,
|
||||
0.4
|
||||
]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [
|
||||
0,
|
||||
-1.75,
|
||||
0
|
||||
],
|
||||
"scale": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [
|
||||
-155,
|
||||
-45,
|
||||
180
|
||||
],
|
||||
"translation": [
|
||||
0,
|
||||
-4.5,
|
||||
0
|
||||
],
|
||||
"scale": [
|
||||
0.65,
|
||||
0.65,
|
||||
0.65
|
||||
]
|
||||
},
|
||||
"head": {
|
||||
"translation": [
|
||||
0,
|
||||
-7,
|
||||
0
|
||||
]
|
||||
},
|
||||
"fixed": {
|
||||
"translation": [
|
||||
0,
|
||||
-7.75,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
"textures": {
|
||||
"particle": "item/container"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "superbwarfare:displaysettings/container.item"
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
Loading…
Add table
Reference in a new issue