添加集装箱

This commit is contained in:
Atsuihsio 2024-11-28 17:21:00 +08:00
parent de13ad8897
commit 67f468ff4a
24 changed files with 1696 additions and 44 deletions

View file

@ -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);

View file

@ -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);
}
}
});
}
}

View file

@ -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;
}
}

View file

@ -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();
}
}

View file

@ -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());
}
}

View file

@ -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");
}
}

View file

@ -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");
}
}

View file

@ -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));
}
}

View file

@ -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));
}
}

View file

@ -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);

View file

@ -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

View file

@ -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));
}
}

View file

@ -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);
}

View file

@ -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);

View file

@ -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());

View file

@ -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
}

View file

@ -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
}
}
}

View 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]}
}
}
]
}
]
}
]
}

View file

@ -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",

View file

@ -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": "标靶",

View file

@ -0,0 +1,7 @@
{
"parent": "superbwarfare:displaysettings/container.item",
"textures": {
"particle": "superbwarfare:block/container"
}
}

View file

@ -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"
}
}

View file

@ -0,0 +1,3 @@
{
"parent": "superbwarfare:displaysettings/container.item"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB