feature: add tux and label copy machine

This commit is contained in:
nimsolated
2026-03-05 18:06:26 -08:00
parent 7dc07af0c9
commit ffb0f8d129
47 changed files with 2418 additions and 66 deletions

View File

@@ -0,0 +1,146 @@
package net.mcreator.nimsrandombullshit.block;
import net.minecraftforge.network.NetworkHooks;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.Containers;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.network.chat.Component;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.core.Direction;
import net.minecraft.core.BlockPos;
import net.mcreator.nimsrandombullshit.world.inventory.LabelCopyMachineGUIMenu;
import net.mcreator.nimsrandombullshit.block.entity.LabelCopyMachineBlockEntity;
import io.netty.buffer.Unpooled;
public class LabelCopyMachineBlock extends Block implements EntityBlock {
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
public LabelCopyMachineBlock() {
super(BlockBehaviour.Properties.of().sound(SoundType.METAL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
}
@Override
public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
return true;
}
@Override
public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
return 0;
}
@Override
public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
return Shapes.empty();
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder);
builder.add(FACING);
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
return super.getStateForPlacement(context).setValue(FACING, context.getHorizontalDirection().getOpposite());
}
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 InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
super.use(blockstate, world, pos, entity, hand, hit);
if (entity instanceof ServerPlayer player) {
NetworkHooks.openScreen(player, new MenuProvider() {
@Override
public Component getDisplayName() {
return Component.literal("Label Copy Machine");
}
@Override
public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
return new LabelCopyMachineGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
}
}, pos);
}
return InteractionResult.SUCCESS;
}
@Override
public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
BlockEntity tileEntity = worldIn.getBlockEntity(pos);
return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
}
@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return new LabelCopyMachineBlockEntity(pos, state);
}
@Override
public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
super.triggerEvent(state, world, pos, eventID, eventParam);
BlockEntity blockEntity = world.getBlockEntity(pos);
return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
}
@Override
public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof LabelCopyMachineBlockEntity be) {
Containers.dropContents(world, pos, be);
world.updateNeighbourForOutputSignal(pos, this);
}
super.onRemove(state, world, pos, newState, isMoving);
}
}
@Override
public boolean hasAnalogOutputSignal(BlockState state) {
return true;
}
@Override
public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
BlockEntity tileentity = world.getBlockEntity(pos);
if (tileentity instanceof LabelCopyMachineBlockEntity be)
return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
else
return 0;
}
}

View File

@@ -0,0 +1,143 @@
package net.mcreator.nimsrandombullshit.block.entity;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.WorldlyContainer;
import net.minecraft.world.ContainerHelper;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.network.chat.Component;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.core.NonNullList;
import net.minecraft.core.Direction;
import net.minecraft.core.BlockPos;
import net.mcreator.nimsrandombullshit.world.inventory.LabelCopyMachineGUIMenu;
import net.mcreator.nimsrandombullshit.init.NimsRandomBullshitModBlockEntities;
import javax.annotation.Nullable;
import java.util.stream.IntStream;
import io.netty.buffer.Unpooled;
public class LabelCopyMachineBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(4, ItemStack.EMPTY);
private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
public LabelCopyMachineBlockEntity(BlockPos position, BlockState state) {
super(NimsRandomBullshitModBlockEntities.LABEL_COPY_MACHINE.get(), position, state);
}
@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("label_copy_machine");
}
@Override
public int getMaxStackSize() {
return 64;
}
@Override
public AbstractContainerMenu createMenu(int id, Inventory inventory) {
return new LabelCopyMachineGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
}
@Override
public Component getDisplayName() {
return Component.literal("Label Copy Machine");
}
@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,107 @@
package net.mcreator.nimsrandombullshit.client.gui;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.network.chat.Component;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.GuiGraphics;
import net.mcreator.nimsrandombullshit.world.inventory.LabelCopyMachineGUIMenu;
import net.mcreator.nimsrandombullshit.procedures.LabelCopyMachineGUISlot3TooltipConditionProcedure;
import net.mcreator.nimsrandombullshit.procedures.LabelCopyMachineGUISlot2TooltipConditionProcedure;
import net.mcreator.nimsrandombullshit.procedures.LabelCopyMachineGUISlot1TooltipConditionProcedure;
import net.mcreator.nimsrandombullshit.procedures.LabelCopyMachineGUISlot0TooltipConditionProcedure;
import net.mcreator.nimsrandombullshit.network.LabelCopyMachineGUIButtonMessage;
import net.mcreator.nimsrandombullshit.NimsRandomBullshitMod;
import java.util.HashMap;
import com.mojang.blaze3d.systems.RenderSystem;
public class LabelCopyMachineGUIScreen extends AbstractContainerScreen<LabelCopyMachineGUIMenu> {
private final static HashMap<String, Object> guistate = LabelCopyMachineGUIMenu.guistate;
private final Level world;
private final int x, y, z;
private final Player entity;
Button button_copy;
public LabelCopyMachineGUIScreen(LabelCopyMachineGUIMenu container, Inventory inventory, Component text) {
super(container, inventory, text);
this.world = container.world;
this.x = container.x;
this.y = container.y;
this.z = container.z;
this.entity = container.entity;
this.imageWidth = 176;
this.imageHeight = 188;
}
private static final ResourceLocation texture = new ResourceLocation("nims_random_bullshit:textures/screens/label_copy_machine_gui.png");
@Override
public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(guiGraphics);
super.render(guiGraphics, mouseX, mouseY, partialTicks);
this.renderTooltip(guiGraphics, mouseX, mouseY);
if (LabelCopyMachineGUISlot0TooltipConditionProcedure.execute(entity))
if (mouseX > leftPos + 15 && mouseX < leftPos + 39 && mouseY > topPos + 45 && mouseY < topPos + 69)
guiGraphics.renderTooltip(font, Component.translatable("gui.nims_random_bullshit.label_copy_machine_gui.tooltip_shipping_label_slot"), mouseX, mouseY);
if (LabelCopyMachineGUISlot1TooltipConditionProcedure.execute(entity))
if (mouseX > leftPos + 51 && mouseX < leftPos + 75 && mouseY > topPos + 18 && mouseY < topPos + 42)
guiGraphics.renderTooltip(font, Component.translatable("gui.nims_random_bullshit.label_copy_machine_gui.tooltip_paper_slot"), mouseX, mouseY);
if (LabelCopyMachineGUISlot2TooltipConditionProcedure.execute(entity))
if (mouseX > leftPos + 92 && mouseX < leftPos + 116 && mouseY > topPos + 18 && mouseY < topPos + 42)
guiGraphics.renderTooltip(font, Component.translatable("gui.nims_random_bullshit.label_copy_machine_gui.tooltip_ink_sac_slot"), mouseX, mouseY);
if (LabelCopyMachineGUISlot3TooltipConditionProcedure.execute(entity))
if (mouseX > leftPos + 128 && mouseX < leftPos + 152 && mouseY > topPos + 45 && mouseY < topPos + 69)
guiGraphics.renderTooltip(font, Component.translatable("gui.nims_random_bullshit.label_copy_machine_gui.tooltip_output_copy_of_shipping_label"), mouseX, mouseY);
}
@Override
protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
guiGraphics.blit(new ResourceLocation("nims_random_bullshit:textures/screens/plus_sign.png"), this.leftPos + 78, this.topPos + 23, 0, 0, 16, 16, 16, 16);
guiGraphics.blit(new ResourceLocation("nims_random_bullshit:textures/screens/copy_icon.png"), this.leftPos + 78, this.topPos + 50, 0, 0, 16, 16, 16, 16);
guiGraphics.blit(new ResourceLocation("nims_random_bullshit:textures/screens/right_arrow_sign.png"), this.leftPos + 42, this.topPos + 50, 0, 0, 32, 16, 32, 16);
guiGraphics.blit(new ResourceLocation("nims_random_bullshit:textures/screens/right_arrow_sign.png"), this.leftPos + 96, this.topPos + 50, 0, 0, 32, 16, 32, 16);
RenderSystem.disableBlend();
}
@Override
public boolean keyPressed(int key, int b, int c) {
if (key == 256) {
this.minecraft.player.closeContainer();
return true;
}
return super.keyPressed(key, b, c);
}
@Override
protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
guiGraphics.drawString(this.font, Component.translatable("gui.nims_random_bullshit.label_copy_machine_gui.label_label_copy_machine"), 6, 5, -12829636, false);
}
@Override
public void init() {
super.init();
button_copy = Button.builder(Component.translatable("gui.nims_random_bullshit.label_copy_machine_gui.button_copy"), e -> {
if (true) {
NimsRandomBullshitMod.PACKET_HANDLER.sendToServer(new LabelCopyMachineGUIButtonMessage(0, x, y, z));
LabelCopyMachineGUIButtonMessage.handleButtonAction(entity, 0, x, y, z);
}
}).bounds(this.leftPos + 65, this.topPos + 72, 46, 20).build();
guistate.put("button:button_copy", button_copy);
this.addRenderableWidget(button_copy);
}
}

View File

@@ -0,0 +1,75 @@
package net.mcreator.nimsrandombullshit.client.model;
import net.minecraft.world.entity.Entity;
import net.minecraft.util.Mth;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.client.model.geom.builders.PartDefinition;
import net.minecraft.client.model.geom.builders.MeshDefinition;
import net.minecraft.client.model.geom.builders.LayerDefinition;
import net.minecraft.client.model.geom.builders.CubeListBuilder;
import net.minecraft.client.model.geom.builders.CubeDeformation;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.EntityModel;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.PoseStack;
// Made with Blockbench 5.0.7
// Exported for Minecraft version 1.17 or later with Mojang mappings
// Paste this class into your mod and generate all required imports
public class Modelpeguin<T extends Entity> extends EntityModel<T> {
// This layer location should be baked with EntityRendererProvider.Context in
// the entity renderer and passed into this model's constructor
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation("nims_random_bullshit", "modelpeguin"), "main");
public final ModelPart root;
public final ModelPart Head;
public final ModelPart BodySegment;
public final ModelPart LeftLeg;
public final ModelPart RightLeg;
public final ModelPart Body;
public final ModelPart RightArm;
public final ModelPart LeftArm;
public Modelpeguin(ModelPart root) {
this.root = root.getChild("root");
this.Head = this.root.getChild("Head");
this.BodySegment = this.root.getChild("BodySegment");
this.LeftLeg = this.BodySegment.getChild("LeftLeg");
this.RightLeg = this.BodySegment.getChild("RightLeg");
this.Body = this.BodySegment.getChild("Body");
this.RightArm = this.BodySegment.getChild("RightArm");
this.LeftArm = this.BodySegment.getChild("LeftArm");
}
public static LayerDefinition createBodyLayer() {
MeshDefinition meshdefinition = new MeshDefinition();
PartDefinition partdefinition = meshdefinition.getRoot();
PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offsetAndRotation(-0.3125F, 24.0F, -0.0938F, 0.0F, 1.5708F, 0.0F));
PartDefinition Head = root.addOrReplaceChild("Head",
CubeListBuilder.create().texOffs(42, 46).addBox(0.5625F, -2.7188F, 1.0625F, 2.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)).texOffs(0, 30).addBox(-7.0F, -8.0F, -1.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.0F)),
PartPose.offset(2.875F, -16.0625F, -2.8438F));
PartDefinition BodySegment = root.addOrReplaceChild("BodySegment", CubeListBuilder.create(), PartPose.offset(-1.5625F, 0.0F, -2.0F));
PartDefinition LeftLeg = BodySegment.addOrReplaceChild("LeftLeg", CubeListBuilder.create().texOffs(30, 46).addBox(-1.8125F, -2.0F, -1.125F, 2.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offset(9.6875F, 0.0F, 5.2188F));
PartDefinition RightLeg = BodySegment.addOrReplaceChild("RightLeg", CubeListBuilder.create().texOffs(18, 46).addBox(-1.8125F, -2.0F, -1.3438F, 2.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offset(9.6875F, 0.0F, -2.5625F));
PartDefinition Body = BodySegment.addOrReplaceChild("Body", CubeListBuilder.create().texOffs(0, 0).addBox(-14.0F, -16.0F, 0.0F, 14.0F, 16.0F, 14.0F, new CubeDeformation(0.0F)), PartPose.offset(8.5938F, 0.0F, -4.7813F));
PartDefinition RightArm = BodySegment.addOrReplaceChild("RightArm", CubeListBuilder.create().texOffs(32, 30).addBox(-4.25F, 0.0F, -0.0625F, 8.0F, 15.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(1.6875F, -16.0313F, -5.6875F));
PartDefinition LeftArm = BodySegment.addOrReplaceChild("LeftArm", CubeListBuilder.create().texOffs(0, 46).addBox(-4.0F, -0.0313F, -1.0F, 8.0F, 15.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(1.4375F, -16.0F, 10.125F));
return LayerDefinition.create(meshdefinition, 64, 64);
}
@Override
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha);
}
public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
this.LeftLeg.xRot = Mth.cos(limbSwing * 1.0F) * -1.0F * limbSwingAmount;
this.RightArm.xRot = Mth.cos(limbSwing * 0.6662F + (float) Math.PI) * limbSwingAmount;
this.Head.yRot = netHeadYaw / (180F / (float) Math.PI);
this.Head.xRot = headPitch / (180F / (float) Math.PI);
this.RightLeg.xRot = Mth.cos(limbSwing * 1.0F) * 1.0F * limbSwingAmount;
this.LeftArm.xRot = Mth.cos(limbSwing * 0.6662F) * limbSwingAmount;
}
}

View File

@@ -0,0 +1,27 @@
package net.mcreator.nimsrandombullshit.client.renderer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.client.renderer.entity.MobRenderer;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.mcreator.nimsrandombullshit.entity.TuxEntity;
import net.mcreator.nimsrandombullshit.client.model.Modelpeguin;
import com.mojang.blaze3d.vertex.PoseStack;
public class TuxRenderer extends MobRenderer<TuxEntity, Modelpeguin<TuxEntity>> {
public TuxRenderer(EntityRendererProvider.Context context) {
super(context, new Modelpeguin<TuxEntity>(context.bakeLayer(Modelpeguin.LAYER_LOCATION)), 0.5f);
}
@Override
protected void scale(TuxEntity entity, PoseStack poseStack, float f) {
poseStack.scale(1.25f, 1.25f, 1.25f);
}
@Override
public ResourceLocation getTextureLocation(TuxEntity entity) {
return new ResourceLocation("nims_random_bullshit:textures/entities/tux.png");
}
}

View File

@@ -0,0 +1,153 @@
package net.mcreator.nimsrandombullshit.entity;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.network.PlayMessages;
import net.minecraftforge.network.NetworkHooks;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.projectile.ThrownPotion;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal;
import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal;
import net.minecraft.world.entity.ai.goal.RandomStrollGoal;
import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal;
import net.minecraft.world.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.MobType;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.EntityDimensions;
import net.minecraft.world.entity.AreaEffectCloud;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.level.ServerBossEvent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.chat.Component;
import net.mcreator.nimsrandombullshit.init.NimsRandomBullshitModEntities;
public class TuxEntity extends Monster {
private final ServerBossEvent bossInfo = new ServerBossEvent(this.getDisplayName(), ServerBossEvent.BossBarColor.BLUE, ServerBossEvent.BossBarOverlay.PROGRESS);
public TuxEntity(PlayMessages.SpawnEntity packet, Level world) {
this(NimsRandomBullshitModEntities.TUX.get(), world);
}
public TuxEntity(EntityType<TuxEntity> type, Level world) {
super(type, world);
setMaxUpStep(0.6f);
xpReward = 0;
setNoAi(false);
setCustomName(Component.literal("Tux"));
setCustomNameVisible(true);
setPersistenceRequired();
refreshDimensions();
}
@Override
public Packet<ClientGamePacketListener> getAddEntityPacket() {
return NetworkHooks.getEntitySpawningPacket(this);
}
@Override
protected void registerGoals() {
super.registerGoals();
this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2, false) {
@Override
protected double getAttackReachSqr(LivingEntity entity) {
return this.mob.getBbWidth() * this.mob.getBbWidth() + entity.getBbWidth();
}
});
this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
this.goalSelector.addGoal(3, new RandomStrollGoal(this, 0.8));
this.goalSelector.addGoal(4, new RandomLookAroundGoal(this));
this.targetSelector.addGoal(5, new NearestAttackableTargetGoal(this, Player.class, false, false));
}
@Override
public MobType getMobType() {
return MobType.UNDEFINED;
}
@Override
public boolean removeWhenFarAway(double distanceToClosestPlayer) {
return false;
}
@Override
public SoundEvent getHurtSound(DamageSource ds) {
return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.hurt"));
}
@Override
public SoundEvent getDeathSound() {
return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.death"));
}
@Override
public boolean hurt(DamageSource damagesource, float amount) {
if (damagesource.getDirectEntity() instanceof ThrownPotion || damagesource.getDirectEntity() instanceof AreaEffectCloud)
return false;
if (damagesource.is(DamageTypes.FALL))
return false;
if (damagesource.is(DamageTypes.CACTUS))
return false;
if (damagesource.is(DamageTypes.DROWN))
return false;
if (damagesource.is(DamageTypes.FALLING_ANVIL))
return false;
return super.hurt(damagesource, amount);
}
@Override
public boolean canChangeDimensions() {
return false;
}
@Override
public void startSeenByPlayer(ServerPlayer player) {
super.startSeenByPlayer(player);
this.bossInfo.addPlayer(player);
}
@Override
public void stopSeenByPlayer(ServerPlayer player) {
super.stopSeenByPlayer(player);
this.bossInfo.removePlayer(player);
}
@Override
public void customServerAiStep() {
super.customServerAiStep();
this.bossInfo.setProgress(this.getHealth() / this.getMaxHealth());
}
@Override
public EntityDimensions getDimensions(Pose pose) {
return super.getDimensions(pose).scale(1.25f);
}
public static void init() {
}
public static AttributeSupplier.Builder createAttributes() {
AttributeSupplier.Builder builder = Mob.createMobAttributes();
builder = builder.add(Attributes.MOVEMENT_SPEED, 0.27);
builder = builder.add(Attributes.MAX_HEALTH, 300);
builder = builder.add(Attributes.ARMOR, 2);
builder = builder.add(Attributes.ATTACK_DAMAGE, 12);
builder = builder.add(Attributes.FOLLOW_RANGE, 32);
builder = builder.add(Attributes.KNOCKBACK_RESISTANCE, 0.6);
builder = builder.add(Attributes.ATTACK_KNOCKBACK, 1.6);
return builder;
}
}

View File

@@ -13,12 +13,14 @@ import net.minecraft.world.level.block.Block;
import net.mcreator.nimsrandombullshit.block.entity.OreMinerBlockEntity;
import net.mcreator.nimsrandombullshit.block.entity.MailboxBlockEntity;
import net.mcreator.nimsrandombullshit.block.entity.LabelCopyMachineBlockEntity;
import net.mcreator.nimsrandombullshit.NimsRandomBullshitMod;
public class NimsRandomBullshitModBlockEntities {
public static final DeferredRegister<BlockEntityType<?>> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, NimsRandomBullshitMod.MODID);
public static final RegistryObject<BlockEntityType<?>> ORE_MINER = register("ore_miner", NimsRandomBullshitModBlocks.ORE_MINER, OreMinerBlockEntity::new);
public static final RegistryObject<BlockEntityType<?>> MAILBOX = register("mailbox", NimsRandomBullshitModBlocks.MAILBOX, MailboxBlockEntity::new);
public static final RegistryObject<BlockEntityType<?>> LABEL_COPY_MACHINE = register("label_copy_machine", NimsRandomBullshitModBlocks.LABEL_COPY_MACHINE, LabelCopyMachineBlockEntity::new);
// Start of user code block custom block entities
// End of user code block custom block entities

View File

@@ -15,6 +15,7 @@ import net.mcreator.nimsrandombullshit.block.PentaCondensedNetherrackBlock;
import net.mcreator.nimsrandombullshit.block.OreMinerBlock;
import net.mcreator.nimsrandombullshit.block.NetherrackJuiceBlock;
import net.mcreator.nimsrandombullshit.block.MailboxBlock;
import net.mcreator.nimsrandombullshit.block.LabelCopyMachineBlock;
import net.mcreator.nimsrandombullshit.block.HexaCondensedNetherrackBlock;
import net.mcreator.nimsrandombullshit.block.CondensedNetherrackBlock;
import net.mcreator.nimsrandombullshit.block.CondensedCondensedNetherrackBlock;
@@ -34,6 +35,7 @@ public class NimsRandomBullshitModBlocks {
public static final RegistryObject<Block> ORE_MINER = REGISTRY.register("ore_miner", () -> new OreMinerBlock());
public static final RegistryObject<Block> NETHERRACK_JUICE = REGISTRY.register("netherrack_juice", () -> new NetherrackJuiceBlock());
public static final RegistryObject<Block> MAILBOX = REGISTRY.register("mailbox", () -> new MailboxBlock());
public static final RegistryObject<Block> LABEL_COPY_MACHINE = REGISTRY.register("label_copy_machine", () -> new LabelCopyMachineBlock());
// Start of user code block custom blocks
// End of user code block custom blocks
}

View File

@@ -16,6 +16,7 @@ import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.Entity;
import net.mcreator.nimsrandombullshit.entity.TuxEntity;
import net.mcreator.nimsrandombullshit.entity.ShitProjectileEntity;
import net.mcreator.nimsrandombullshit.entity.GhoulEntity;
import net.mcreator.nimsrandombullshit.NimsRandomBullshitMod;
@@ -27,6 +28,10 @@ public class NimsRandomBullshitModEntities {
EntityType.Builder.<ShitProjectileEntity>of(ShitProjectileEntity::new, MobCategory.MISC).setCustomClientFactory(ShitProjectileEntity::new).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(1).sized(0.5f, 0.5f));
public static final RegistryObject<EntityType<GhoulEntity>> GHOUL = register("ghoul",
EntityType.Builder.<GhoulEntity>of(GhoulEntity::new, MobCategory.MONSTER).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(GhoulEntity::new).fireImmune().sized(0.6f, 1.8f));
public static final RegistryObject<EntityType<TuxEntity>> TUX = register("tux",
EntityType.Builder.<TuxEntity>of(TuxEntity::new, MobCategory.MONSTER).setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(TuxEntity::new)
.sized(0.6f, 1.8f));
// Start of user code block custom entities
// End of user code block custom entities
@@ -38,11 +43,13 @@ public class NimsRandomBullshitModEntities {
public static void init(FMLCommonSetupEvent event) {
event.enqueueWork(() -> {
GhoulEntity.init();
TuxEntity.init();
});
}
@SubscribeEvent
public static void registerAttributes(EntityAttributeCreationEvent event) {
event.put(GHOUL.get(), GhoulEntity.createAttributes().build());
event.put(TUX.get(), TuxEntity.createAttributes().build());
}
}

View File

@@ -11,6 +11,7 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraft.client.renderer.entity.ThrownItemRenderer;
import net.mcreator.nimsrandombullshit.client.renderer.TuxRenderer;
import net.mcreator.nimsrandombullshit.client.renderer.GhoulRenderer;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
@@ -19,5 +20,6 @@ public class NimsRandomBullshitModEntityRenderers {
public static void registerEntityRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerEntityRenderer(NimsRandomBullshitModEntities.SHIT_PROJECTILE.get(), ThrownItemRenderer::new);
event.registerEntityRenderer(NimsRandomBullshitModEntities.GHOUL.get(), GhoulRenderer::new);
event.registerEntityRenderer(NimsRandomBullshitModEntities.TUX.get(), TuxRenderer::new);
}
}

View File

@@ -55,6 +55,8 @@ public class NimsRandomBullshitModItems {
public static final RegistryObject<Item> NETHERRACK_JUICE_BUCKET = REGISTRY.register("netherrack_juice_bucket", () -> new NetherrackJuiceItem());
public static final RegistryObject<Item> MAILBOX = block(NimsRandomBullshitModBlocks.MAILBOX);
public static final RegistryObject<Item> SHIPPING_LABEL = REGISTRY.register("shipping_label", () -> new ShippingLabelItem());
public static final RegistryObject<Item> TUX_SPAWN_EGG = REGISTRY.register("tux_spawn_egg", () -> new ForgeSpawnEggItem(NimsRandomBullshitModEntities.TUX, -16777216, -1, new Item.Properties()));
public static final RegistryObject<Item> LABEL_COPY_MACHINE = block(NimsRandomBullshitModBlocks.LABEL_COPY_MACHINE);
// Start of user code block custom items
// End of user code block custom items

View File

@@ -15,6 +15,7 @@ import net.mcreator.nimsrandombullshit.world.inventory.ShitGUIMenu;
import net.mcreator.nimsrandombullshit.world.inventory.OreMinerGUIMenu;
import net.mcreator.nimsrandombullshit.world.inventory.MailboxNameEntryGUIMenu;
import net.mcreator.nimsrandombullshit.world.inventory.MailboxGUIMenu;
import net.mcreator.nimsrandombullshit.world.inventory.LabelCopyMachineGUIMenu;
import net.mcreator.nimsrandombullshit.NimsRandomBullshitMod;
public class NimsRandomBullshitModMenus {
@@ -23,4 +24,5 @@ public class NimsRandomBullshitModMenus {
public static final RegistryObject<MenuType<OreMinerGUIMenu>> ORE_MINER_GUI = REGISTRY.register("ore_miner_gui", () -> IForgeMenuType.create(OreMinerGUIMenu::new));
public static final RegistryObject<MenuType<MailboxGUIMenu>> MAILBOX_GUI = REGISTRY.register("mailbox_gui", () -> IForgeMenuType.create(MailboxGUIMenu::new));
public static final RegistryObject<MenuType<MailboxNameEntryGUIMenu>> MAILBOX_NAME_ENTRY_GUI = REGISTRY.register("mailbox_name_entry_gui", () -> IForgeMenuType.create(MailboxNameEntryGUIMenu::new));
public static final RegistryObject<MenuType<LabelCopyMachineGUIMenu>> LABEL_COPY_MACHINE_GUI = REGISTRY.register("label_copy_machine_gui", () -> IForgeMenuType.create(LabelCopyMachineGUIMenu::new));
}

View File

@@ -0,0 +1,20 @@
/*
* MCreator note: This file will be REGENERATED on each build.
*/
package net.mcreator.nimsrandombullshit.init;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.api.distmarker.Dist;
import net.mcreator.nimsrandombullshit.client.model.Modelpeguin;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = {Dist.CLIENT})
public class NimsRandomBullshitModModels {
@SubscribeEvent
public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(Modelpeguin.LAYER_LOCATION, Modelpeguin::createBodyLayer);
}
}

View File

@@ -15,6 +15,7 @@ import net.mcreator.nimsrandombullshit.client.gui.ShitGUIScreen;
import net.mcreator.nimsrandombullshit.client.gui.OreMinerGUIScreen;
import net.mcreator.nimsrandombullshit.client.gui.MailboxNameEntryGUIScreen;
import net.mcreator.nimsrandombullshit.client.gui.MailboxGUIScreen;
import net.mcreator.nimsrandombullshit.client.gui.LabelCopyMachineGUIScreen;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class NimsRandomBullshitModScreens {
@@ -25,6 +26,7 @@ public class NimsRandomBullshitModScreens {
MenuScreens.register(NimsRandomBullshitModMenus.ORE_MINER_GUI.get(), OreMinerGUIScreen::new);
MenuScreens.register(NimsRandomBullshitModMenus.MAILBOX_GUI.get(), MailboxGUIScreen::new);
MenuScreens.register(NimsRandomBullshitModMenus.MAILBOX_NAME_ENTRY_GUI.get(), MailboxNameEntryGUIScreen::new);
MenuScreens.register(NimsRandomBullshitModMenus.LABEL_COPY_MACHINE_GUI.get(), LabelCopyMachineGUIScreen::new);
});
}
}

View File

@@ -49,8 +49,10 @@ public class NimsRandomBullshitModTabs {
} else if (tabData.getTabKey() == CreativeModeTabs.FUNCTIONAL_BLOCKS) {
tabData.accept(NimsRandomBullshitModBlocks.ORE_MINER.get().asItem());
tabData.accept(NimsRandomBullshitModBlocks.MAILBOX.get().asItem());
tabData.accept(NimsRandomBullshitModBlocks.LABEL_COPY_MACHINE.get().asItem());
} else if (tabData.getTabKey() == CreativeModeTabs.SPAWN_EGGS) {
tabData.accept(NimsRandomBullshitModItems.GHOUL_SPAWN_EGG.get());
tabData.accept(NimsRandomBullshitModItems.TUX_SPAWN_EGG.get());
}
}
}

View File

@@ -0,0 +1,75 @@
package net.mcreator.nimsrandombullshit.network;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.player.Player;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.core.BlockPos;
import net.mcreator.nimsrandombullshit.world.inventory.LabelCopyMachineGUIMenu;
import net.mcreator.nimsrandombullshit.procedures.LabelCopyMachineCopyButtonPressedProcedure;
import net.mcreator.nimsrandombullshit.NimsRandomBullshitMod;
import java.util.function.Supplier;
import java.util.HashMap;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class LabelCopyMachineGUIButtonMessage {
private final int buttonID, x, y, z;
public LabelCopyMachineGUIButtonMessage(FriendlyByteBuf buffer) {
this.buttonID = buffer.readInt();
this.x = buffer.readInt();
this.y = buffer.readInt();
this.z = buffer.readInt();
}
public LabelCopyMachineGUIButtonMessage(int buttonID, int x, int y, int z) {
this.buttonID = buttonID;
this.x = x;
this.y = y;
this.z = z;
}
public static void buffer(LabelCopyMachineGUIButtonMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.buttonID);
buffer.writeInt(message.x);
buffer.writeInt(message.y);
buffer.writeInt(message.z);
}
public static void handler(LabelCopyMachineGUIButtonMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> {
Player entity = context.getSender();
int buttonID = message.buttonID;
int x = message.x;
int y = message.y;
int z = message.z;
handleButtonAction(entity, buttonID, x, y, z);
});
context.setPacketHandled(true);
}
public static void handleButtonAction(Player entity, int buttonID, int x, int y, int z) {
Level world = entity.level();
HashMap guistate = LabelCopyMachineGUIMenu.guistate;
// security measure to prevent arbitrary chunk generation
if (!world.hasChunkAt(new BlockPos(x, y, z)))
return;
if (buttonID == 0) {
LabelCopyMachineCopyButtonPressedProcedure.execute(entity);
}
}
@SubscribeEvent
public static void registerMessage(FMLCommonSetupEvent event) {
NimsRandomBullshitMod.addNetworkMessage(LabelCopyMachineGUIButtonMessage.class, LabelCopyMachineGUIButtonMessage::buffer, LabelCopyMachineGUIButtonMessage::new, LabelCopyMachineGUIButtonMessage::handler);
}
}

View File

@@ -0,0 +1,84 @@
package net.mcreator.nimsrandombullshit.procedures;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.Entity;
import net.mcreator.nimsrandombullshit.init.NimsRandomBullshitModItems;
import java.util.function.Supplier;
import java.util.Map;
public class LabelCopyMachineCopyButtonPressedProcedure {
public static void execute(Entity entity) {
if (entity == null)
return;
if ((entity instanceof Player _plrSlotItem && _plrSlotItem.containerMenu instanceof Supplier _splr && _splr.get() instanceof Map _slt ? ((Slot) _slt.get(0)).getItem() : ItemStack.EMPTY).getItem() == NimsRandomBullshitModItems.SHIPPING_LABEL
.get() && new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(1) > 0 && new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(2) > 0) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack _setstack = (entity instanceof Player _plrSlotItem && _plrSlotItem.containerMenu instanceof Supplier _splr && _splr.get() instanceof Map _slt ? ((Slot) _slt.get(1)).getItem() : ItemStack.EMPTY).copy();
_setstack.setCount((int) (new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(1) - 1));
((Slot) _slots.get(1)).set(_setstack);
_player.containerMenu.broadcastChanges();
}
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack _setstack = (entity instanceof Player _plrSlotItem && _plrSlotItem.containerMenu instanceof Supplier _splr && _splr.get() instanceof Map _slt ? ((Slot) _slt.get(2)).getItem() : ItemStack.EMPTY).copy();
_setstack.setCount((int) (new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(2) - 1));
((Slot) _slots.get(2)).set(_setstack);
_player.containerMenu.broadcastChanges();
}
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack _setstack = (entity instanceof Player _plrSlotItem && _plrSlotItem.containerMenu instanceof Supplier _splr && _splr.get() instanceof Map _slt ? ((Slot) _slt.get(0)).getItem() : ItemStack.EMPTY).copy();
_setstack.setCount((int) (new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(3) + 1));
((Slot) _slots.get(3)).set(_setstack);
_player.containerMenu.broadcastChanges();
}
}
}
}

View File

@@ -0,0 +1,29 @@
package net.mcreator.nimsrandombullshit.procedures;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.Entity;
import java.util.function.Supplier;
import java.util.Map;
public class LabelCopyMachineGUISlot0TooltipConditionProcedure {
public static boolean execute(Entity entity) {
if (entity == null)
return false;
if (new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(0) > 0) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,29 @@
package net.mcreator.nimsrandombullshit.procedures;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.Entity;
import java.util.function.Supplier;
import java.util.Map;
public class LabelCopyMachineGUISlot1TooltipConditionProcedure {
public static boolean execute(Entity entity) {
if (entity == null)
return false;
if (new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(1) > 0) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,29 @@
package net.mcreator.nimsrandombullshit.procedures;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.Entity;
import java.util.function.Supplier;
import java.util.Map;
public class LabelCopyMachineGUISlot2TooltipConditionProcedure {
public static boolean execute(Entity entity) {
if (entity == null)
return false;
if (new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(2) > 0) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,29 @@
package net.mcreator.nimsrandombullshit.procedures;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.Entity;
import java.util.function.Supplier;
import java.util.Map;
public class LabelCopyMachineGUISlot3TooltipConditionProcedure {
public static boolean execute(Entity entity) {
if (entity == null)
return false;
if (new Object() {
public int getAmount(int sltid) {
if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) {
ItemStack stack = ((Slot) _slots.get(sltid)).getItem();
if (stack != null)
return stack.getCount();
}
return 0;
}
}.getAmount(3) > 0) {
return false;
}
return true;
}
}

View File

@@ -0,0 +1,285 @@
package net.mcreator.nimsrandombullshit.world.inventory;
import net.minecraftforge.items.SlotItemHandler;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.Level;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.inventory.ContainerLevelAccess;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.Entity;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.core.BlockPos;
import net.mcreator.nimsrandombullshit.init.NimsRandomBullshitModMenus;
import net.mcreator.nimsrandombullshit.init.NimsRandomBullshitModItems;
import java.util.function.Supplier;
import java.util.Map;
import java.util.HashMap;
public class LabelCopyMachineGUIMenu extends AbstractContainerMenu implements Supplier<Map<Integer, Slot>> {
public final static HashMap<String, Object> guistate = new HashMap<>();
public final Level world;
public final Player entity;
public int x, y, z;
private ContainerLevelAccess access = ContainerLevelAccess.NULL;
private IItemHandler internal;
private final Map<Integer, Slot> customSlots = new HashMap<>();
private boolean bound = false;
private Supplier<Boolean> boundItemMatcher = null;
private Entity boundEntity = null;
private BlockEntity boundBlockEntity = null;
public LabelCopyMachineGUIMenu(int id, Inventory inv, FriendlyByteBuf extraData) {
super(NimsRandomBullshitModMenus.LABEL_COPY_MACHINE_GUI.get(), id);
this.entity = inv.player;
this.world = inv.player.level();
this.internal = new ItemStackHandler(4);
BlockPos pos = null;
if (extraData != null) {
pos = extraData.readBlockPos();
this.x = pos.getX();
this.y = pos.getY();
this.z = pos.getZ();
access = ContainerLevelAccess.create(world, pos);
}
if (pos != null) {
if (extraData.readableBytes() == 1) { // bound to item
byte hand = extraData.readByte();
ItemStack itemstack = hand == 0 ? this.entity.getMainHandItem() : this.entity.getOffhandItem();
this.boundItemMatcher = () -> itemstack == (hand == 0 ? this.entity.getMainHandItem() : this.entity.getOffhandItem());
itemstack.getCapability(ForgeCapabilities.ITEM_HANDLER, null).ifPresent(capability -> {
this.internal = capability;
this.bound = true;
});
} else if (extraData.readableBytes() > 1) { // bound to entity
extraData.readByte(); // drop padding
boundEntity = world.getEntity(extraData.readVarInt());
if (boundEntity != null)
boundEntity.getCapability(ForgeCapabilities.ITEM_HANDLER, null).ifPresent(capability -> {
this.internal = capability;
this.bound = true;
});
} else { // might be bound to block
boundBlockEntity = this.world.getBlockEntity(pos);
if (boundBlockEntity != null)
boundBlockEntity.getCapability(ForgeCapabilities.ITEM_HANDLER, null).ifPresent(capability -> {
this.internal = capability;
this.bound = true;
});
}
}
this.customSlots.put(0, this.addSlot(new SlotItemHandler(internal, 0, 21, 51) {
private final int slot = 0;
private int x = LabelCopyMachineGUIMenu.this.x;
private int y = LabelCopyMachineGUIMenu.this.y;
@Override
public boolean mayPlace(ItemStack stack) {
return NimsRandomBullshitModItems.SHIPPING_LABEL.get() == stack.getItem();
}
}));
this.customSlots.put(1, this.addSlot(new SlotItemHandler(internal, 1, 57, 24) {
private final int slot = 1;
private int x = LabelCopyMachineGUIMenu.this.x;
private int y = LabelCopyMachineGUIMenu.this.y;
@Override
public boolean mayPlace(ItemStack stack) {
return Items.PAPER == stack.getItem();
}
}));
this.customSlots.put(2, this.addSlot(new SlotItemHandler(internal, 2, 97, 24) {
private final int slot = 2;
private int x = LabelCopyMachineGUIMenu.this.x;
private int y = LabelCopyMachineGUIMenu.this.y;
@Override
public boolean mayPlace(ItemStack stack) {
return Items.INK_SAC == stack.getItem();
}
}));
this.customSlots.put(3, this.addSlot(new SlotItemHandler(internal, 3, 133, 51) {
private final int slot = 3;
private int x = LabelCopyMachineGUIMenu.this.x;
private int y = LabelCopyMachineGUIMenu.this.y;
@Override
public boolean mayPlace(ItemStack stack) {
return false;
}
}));
for (int si = 0; si < 3; ++si)
for (int sj = 0; sj < 9; ++sj)
this.addSlot(new Slot(inv, sj + (si + 1) * 9, 0 + 8 + sj * 18, 11 + 84 + si * 18));
for (int si = 0; si < 9; ++si)
this.addSlot(new Slot(inv, si, 0 + 8 + si * 18, 11 + 142));
}
@Override
public boolean stillValid(Player player) {
if (this.bound) {
if (this.boundItemMatcher != null)
return this.boundItemMatcher.get();
else if (this.boundBlockEntity != null)
return AbstractContainerMenu.stillValid(this.access, player, this.boundBlockEntity.getBlockState().getBlock());
else if (this.boundEntity != null)
return this.boundEntity.isAlive();
}
return true;
}
@Override
public ItemStack quickMoveStack(Player playerIn, int index) {
ItemStack itemstack = ItemStack.EMPTY;
Slot slot = (Slot) this.slots.get(index);
if (slot != null && slot.hasItem()) {
ItemStack itemstack1 = slot.getItem();
itemstack = itemstack1.copy();
if (index < 4) {
if (!this.moveItemStackTo(itemstack1, 4, this.slots.size(), true))
return ItemStack.EMPTY;
slot.onQuickCraft(itemstack1, itemstack);
} else if (!this.moveItemStackTo(itemstack1, 0, 4, false)) {
if (index < 4 + 27) {
if (!this.moveItemStackTo(itemstack1, 4 + 27, this.slots.size(), true))
return ItemStack.EMPTY;
} else {
if (!this.moveItemStackTo(itemstack1, 4, 4 + 27, false))
return ItemStack.EMPTY;
}
return ItemStack.EMPTY;
}
if (itemstack1.getCount() == 0)
slot.set(ItemStack.EMPTY);
else
slot.setChanged();
if (itemstack1.getCount() == itemstack.getCount())
return ItemStack.EMPTY;
slot.onTake(playerIn, itemstack1);
}
return itemstack;
}
@Override
protected boolean moveItemStackTo(ItemStack p_38904_, int p_38905_, int p_38906_, boolean p_38907_) {
boolean flag = false;
int i = p_38905_;
if (p_38907_) {
i = p_38906_ - 1;
}
if (p_38904_.isStackable()) {
while (!p_38904_.isEmpty()) {
if (p_38907_) {
if (i < p_38905_) {
break;
}
} else if (i >= p_38906_) {
break;
}
Slot slot = this.slots.get(i);
ItemStack itemstack = slot.getItem();
if (slot.mayPlace(itemstack) && !itemstack.isEmpty() && ItemStack.isSameItemSameTags(p_38904_, itemstack)) {
int j = itemstack.getCount() + p_38904_.getCount();
int maxSize = Math.min(slot.getMaxStackSize(), p_38904_.getMaxStackSize());
if (j <= maxSize) {
p_38904_.setCount(0);
itemstack.setCount(j);
slot.set(itemstack);
flag = true;
} else if (itemstack.getCount() < maxSize) {
p_38904_.shrink(maxSize - itemstack.getCount());
itemstack.setCount(maxSize);
slot.set(itemstack);
flag = true;
}
}
if (p_38907_) {
--i;
} else {
++i;
}
}
}
if (!p_38904_.isEmpty()) {
if (p_38907_) {
i = p_38906_ - 1;
} else {
i = p_38905_;
}
while (true) {
if (p_38907_) {
if (i < p_38905_) {
break;
}
} else if (i >= p_38906_) {
break;
}
Slot slot1 = this.slots.get(i);
ItemStack itemstack1 = slot1.getItem();
if (itemstack1.isEmpty() && slot1.mayPlace(p_38904_)) {
if (p_38904_.getCount() > slot1.getMaxStackSize()) {
slot1.setByPlayer(p_38904_.split(slot1.getMaxStackSize()));
} else {
slot1.setByPlayer(p_38904_.split(p_38904_.getCount()));
}
slot1.setChanged();
flag = true;
break;
}
if (p_38907_) {
--i;
} else {
++i;
}
}
}
return flag;
}
@Override
public void removed(Player playerIn) {
super.removed(playerIn);
if (!bound && playerIn instanceof ServerPlayer serverPlayer) {
if (!serverPlayer.isAlive() || serverPlayer.hasDisconnected()) {
for (int j = 0; j < internal.getSlots(); ++j) {
if (j == 0)
continue;
if (j == 1)
continue;
if (j == 2)
continue;
if (j == 3)
continue;
playerIn.drop(internal.extractItem(j, internal.getStackInSlot(j).getCount(), false), false);
}
} else {
for (int i = 0; i < internal.getSlots(); ++i) {
if (i == 0)
continue;
if (i == 1)
continue;
if (i == 2)
continue;
if (i == 3)
continue;
playerIn.getInventory().placeItemBackInInventory(internal.extractItem(i, internal.getStackInSlot(i).getCount(), false));
}
}
}
}
public Map<Integer, Slot> get() {
return customSlots;
}
}