diff --git a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java index 259bce9cb..4a0da66a7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java +++ b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java @@ -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); diff --git a/src/main/java/com/atsuishio/superbwarfare/block/ContainerBlock.java b/src/main/java/com/atsuishio/superbwarfare/block/ContainerBlock.java new file mode 100644 index 000000000..80b6c5099 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/ContainerBlock.java @@ -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 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 getDrops(BlockState state, LootParams.Builder builder) { + List 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); + } + } + }); + + } + +} + diff --git a/src/main/java/com/atsuishio/superbwarfare/block/display/ContainerDisplayItem.java b/src/main/java/com/atsuishio/superbwarfare/block/display/ContainerDisplayItem.java new file mode 100644 index 000000000..d9f810fb0 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/display/ContainerDisplayItem.java @@ -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 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; + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerTileEntity.java b/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerTileEntity.java new file mode 100644 index 000000000..03a491403 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerTileEntity.java @@ -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 stacks = NonNullList.withSize(9, ItemStack.EMPTY); + private final LazyOptional[] 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(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 getItems() { + return this.stacks; + } + + @Override + protected void setItems(NonNullList 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 LazyOptional getCapability(Capability 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 handler : handlers) + handler.invalidate(); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/listener/ClientListener.java b/src/main/java/com/atsuishio/superbwarfare/block/listener/ClientListener.java new file mode 100644 index 000000000..de2097a85 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/listener/ClientListener.java @@ -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()); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerBlockModel.java b/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerBlockModel.java new file mode 100644 index 000000000..7853b069f --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerBlockModel.java @@ -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 { + @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"); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerDisplayModel.java b/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerDisplayModel.java new file mode 100644 index 000000000..9c265bfa8 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerDisplayModel.java @@ -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 { + @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"); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerDisplayItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerDisplayItemRenderer.java new file mode 100644 index 000000000..3b0f2d9bb --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerDisplayItemRenderer.java @@ -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 { + public ContainerDisplayItemRenderer() { + super(new ContainerDisplayModel()); + } + + @Override + public RenderType getRenderType(ContainerDisplayItem animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(getTextureLocation(animatable)); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerTileRenderer.java b/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerTileRenderer.java new file mode 100644 index 000000000..b39a24c00 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerTileRenderer.java @@ -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 { + public ContainerTileRenderer() { + super(new ContainerBlockModel()); + } + + @Override + public RenderType getRenderType(ContainerTileEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(getTextureLocation(animatable)); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index f402fc43d..c8323308f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -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); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/SenpaiEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/SenpaiEntity.java index 2e363eca0..f52e55131 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/SenpaiEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/SenpaiEntity.java @@ -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 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 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 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 diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModBlockEntities.java b/src/main/java/com/atsuishio/superbwarfare/init/ModBlockEntities.java new file mode 100644 index 000000000..53d30685a --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModBlockEntities.java @@ -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> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ModUtils.MODID); + public static final RegistryObject> CONTAINER = REGISTRY.register("container", () -> BlockEntityType.Builder.of(ContainerTileEntity::new, ModBlocks.CONTAINER.get()).build(null)); + + private static RegistryObject> register(String registryname, RegistryObject block, BlockEntityType.BlockEntitySupplier supplier) { + return REGISTRY.register(registryname, () -> BlockEntityType.Builder.of(supplier, block.get()).build(null)); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModBlocks.java b/src/main/java/com/atsuishio/superbwarfare/init/ModBlocks.java index baab90417..35bb8ef97 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModBlocks.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModBlocks.java @@ -27,4 +27,5 @@ public class ModBlocks { public static final RegistryObject TUNGSTEN_BLOCK = REGISTRY.register("tungsten_block", TungstenBlock::new); public static final RegistryObject SILVER_BLOCK = REGISTRY.register("silver_block", SilverBlock::new); public static final RegistryObject CEMENTED_CARBIDE_BLOCK = REGISTRY.register("cemented_carbide_block", CementedCarbideBlock::new); + public static final RegistryObject CONTAINER = REGISTRY.register("container", ContainerBlock::new); } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java index 8008fc3cb..8ad8ae9eb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java @@ -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 ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ModUtils.MODID); + public static final RegistryObject CONTAINER = ITEMS.register(ModBlocks.CONTAINER.getId().getPath(), () -> new ContainerDisplayItem(ModBlocks.CONTAINER.get(), new Item.Properties())); public static final RegistryObject SENPAI_SPAWN_EGG = ITEMS.register("senpai_spawn_egg", () -> new ForgeSpawnEggItem(ModEntities.SENPAI, -11584987, -14014413, new Item.Properties())); public static final RegistryObject ANCIENT_CPU = ITEMS.register("ancient_cpu", () -> new Item(new Item.Properties().rarity(Rarity.RARE))); public static final RegistryObject PROPELLER = ITEMS.register("propeller", () -> new Item(new Item.Properties())); @@ -122,6 +124,7 @@ public class ModItems { public static final RegistryObject HAMMER = ITEMS.register("hammer", Hammer::new); public static final RegistryObject CROWBAR = ITEMS.register("crowbar", Crowbar::new); public static final RegistryObject ARMOR_PLATE = ITEMS.register("armor_plate", ArmorPlate::new); + public static final RegistryObject RU_HELMET_6B47 = ITEMS.register("ru_helmet_6b47", RuHelmet6b47::new); public static final RegistryObject RU_CHEST_6B43 = ITEMS.register("ru_chest_6b43", RuChest6b43::new); public static final RegistryObject US_HELMET_PASTG = ITEMS.register("us_helmet_pastg", UsHelmetPastg::new); diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java index 494b505a2..1e0c1c38b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java @@ -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()); diff --git a/src/main/resources/assets/superbwarfare/animations/container.animation.json b/src/main/resources/assets/superbwarfare/animations/container.animation.json new file mode 100644 index 000000000..a34ca418a --- /dev/null +++ b/src/main/resources/assets/superbwarfare/animations/container.animation.json @@ -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 +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/blockstates/container.json b/src/main/resources/assets/superbwarfare/blockstates/container.json new file mode 100644 index 000000000..adc6fa48d --- /dev/null +++ b/src/main/resources/assets/superbwarfare/blockstates/container.json @@ -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 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/geo/container.geo.json b/src/main/resources/assets/superbwarfare/geo/container.geo.json new file mode 100644 index 000000000..ed9a8cd38 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/geo/container.geo.json @@ -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]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index a2083f070..6510989eb 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -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", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index b0ea511d2..e9949b448 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -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": "标靶", diff --git a/src/main/resources/assets/superbwarfare/models/custom/container_particle.json b/src/main/resources/assets/superbwarfare/models/custom/container_particle.json new file mode 100644 index 000000000..4535e2f0c --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/custom/container_particle.json @@ -0,0 +1,7 @@ + +{ + "parent": "superbwarfare:displaysettings/container.item", + "textures": { + "particle": "superbwarfare:block/container" + } +} diff --git a/src/main/resources/assets/superbwarfare/models/displaysettings/container.item.json b/src/main/resources/assets/superbwarfare/models/displaysettings/container.item.json new file mode 100644 index 000000000..ad5435701 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/displaysettings/container.item.json @@ -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" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/models/item/container.json b/src/main/resources/assets/superbwarfare/models/item/container.json new file mode 100644 index 000000000..a29b43908 --- /dev/null +++ b/src/main/resources/assets/superbwarfare/models/item/container.json @@ -0,0 +1,3 @@ +{ + "parent": "superbwarfare:displaysettings/container.item" +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/textures/block/container.png b/src/main/resources/assets/superbwarfare/textures/block/container.png new file mode 100644 index 000000000..310bd6ee1 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/block/container.png differ