This commit is contained in:
Ell 2023-07-07 19:54:52 +02:00
parent 3d3b1465c5
commit 05b815ac97
34 changed files with 193 additions and 226 deletions

View file

@ -48,8 +48,6 @@ import de.ellpeck.prettypipes.terminal.containers.CraftingTerminalGui;
import de.ellpeck.prettypipes.terminal.containers.ItemTerminalContainer; import de.ellpeck.prettypipes.terminal.containers.ItemTerminalContainer;
import de.ellpeck.prettypipes.terminal.containers.ItemTerminalGui; import de.ellpeck.prettypipes.terminal.containers.ItemTerminalGui;
import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.entity.EntityRenderers; import net.minecraft.client.renderer.entity.EntityRenderers;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -57,9 +55,7 @@ import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
@ -80,12 +76,13 @@ import java.util.function.BiFunction;
@Mod.EventBusSubscriber(bus = Bus.MOD) @Mod.EventBusSubscriber(bus = Bus.MOD)
public final class Registry { public final class Registry {
public static final CreativeModeTab TAB = new CreativeModeTab(PrettyPipes.ID) { // TODO creative tab bleh
/* public static final CreativeModeTab TAB = new CreativeModeTab(PrettyPipes.ID) {
@Override @Override
public ItemStack makeIcon() { public ItemStack makeIcon() {
return new ItemStack(Registry.wrenchItem); return new ItemStack(Registry.wrenchItem);
} }
}; };*/
public static Capability<PipeNetwork> pipeNetworkCapability = CapabilityManager.get(new CapabilityToken<>() { public static Capability<PipeNetwork> pipeNetworkCapability = CapabilityManager.get(new CapabilityToken<>() {
}); });
@ -132,7 +129,7 @@ public final class Registry {
event.register(ForgeRegistries.Keys.ITEMS, h -> { event.register(ForgeRegistries.Keys.ITEMS, h -> {
h.register(new ResourceLocation(PrettyPipes.ID, "wrench"), Registry.wrenchItem = new WrenchItem()); h.register(new ResourceLocation(PrettyPipes.ID, "wrench"), Registry.wrenchItem = new WrenchItem());
h.register(new ResourceLocation(PrettyPipes.ID, "blank_module"), new Item(new Item.Properties().tab(Registry.TAB))); h.register(new ResourceLocation(PrettyPipes.ID, "blank_module"), new Item(new Item.Properties()));
h.register(new ResourceLocation(PrettyPipes.ID, "pipe_frame"), Registry.pipeFrameItem = new PipeFrameItem()); h.register(new ResourceLocation(PrettyPipes.ID, "pipe_frame"), Registry.pipeFrameItem = new PipeFrameItem());
h.register(new ResourceLocation(PrettyPipes.ID, "stack_size_module"), new StackSizeModuleItem()); h.register(new ResourceLocation(PrettyPipes.ID, "stack_size_module"), new StackSizeModuleItem());
h.register(new ResourceLocation(PrettyPipes.ID, "redstone_module"), new RedstoneModuleItem()); h.register(new ResourceLocation(PrettyPipes.ID, "redstone_module"), new RedstoneModuleItem());
@ -157,7 +154,7 @@ public final class Registry {
ForgeRegistries.BLOCKS.getEntries().stream() ForgeRegistries.BLOCKS.getEntries().stream()
.filter(b -> b.getKey().location().getNamespace().equals(PrettyPipes.ID)) .filter(b -> b.getKey().location().getNamespace().equals(PrettyPipes.ID))
.forEach(b -> h.register(b.getKey().location(), new BlockItem(b.getValue(), new Item.Properties().tab(Registry.TAB)))); .forEach(b -> h.register(b.getKey().location(), new BlockItem(b.getValue(), new Item.Properties())));
}); });
event.register(ForgeRegistries.Keys.BLOCK_ENTITY_TYPES, h -> { event.register(ForgeRegistries.Keys.BLOCK_ENTITY_TYPES, h -> {
@ -188,7 +185,7 @@ public final class Registry {
private static <T extends AbstractPipeContainer<?>> MenuType<T> registerPipeContainer(RegisterEvent.RegisterHelper<MenuType<?>> helper, String name) { private static <T extends AbstractPipeContainer<?>> MenuType<T> registerPipeContainer(RegisterEvent.RegisterHelper<MenuType<?>> helper, String name) {
var type = (MenuType<T>) IForgeMenuType.create((windowId, inv, data) -> { var type = (MenuType<T>) IForgeMenuType.create((windowId, inv, data) -> {
var tile = Utility.getBlockEntity(PipeBlockEntity.class, inv.player.level, data.readBlockPos()); var tile = Utility.getBlockEntity(PipeBlockEntity.class, inv.player.level(), data.readBlockPos());
var moduleIndex = data.readInt(); var moduleIndex = data.readInt();
var moduleStack = tile.modules.getStackInSlot(moduleIndex); var moduleStack = tile.modules.getStackInSlot(moduleIndex);
return ((IModule) moduleStack.getItem()).getContainer(moduleStack, tile, windowId, inv, inv.player, moduleIndex); return ((IModule) moduleStack.getItem()).getContainer(moduleStack, tile, windowId, inv, inv.player, moduleIndex);

View file

@ -48,7 +48,7 @@ public final class Utility {
public static Direction getDirectionFromOffset(BlockPos pos, BlockPos other) { public static Direction getDirectionFromOffset(BlockPos pos, BlockPos other) {
var diff = pos.subtract(other); var diff = pos.subtract(other);
return Direction.fromNormal(diff.getX(), diff.getY(), diff.getZ()); return Direction.fromDelta(diff.getX(), diff.getY(), diff.getZ());
} }
public static void addTooltip(String name, List<Component> tooltip) { public static void addTooltip(String name, List<Component> tooltip) {

View file

@ -45,7 +45,7 @@ public class CraftingTerminalTransferHandler implements IRecipeTransferHandler<C
List<PacketGhostSlot.Entry> stacks = new ArrayList<>(); List<PacketGhostSlot.Entry> stacks = new ArrayList<>();
var ingredients = slots.getSlotViews(RecipeIngredientRole.INPUT); var ingredients = slots.getSlotViews(RecipeIngredientRole.INPUT);
for (var entry : ingredients) for (var entry : ingredients)
stacks.add(new PacketGhostSlot.Entry(entry.getIngredients(VanillaTypes.ITEM_STACK).collect(Collectors.toList()))); stacks.add(new PacketGhostSlot.Entry(player.level(), entry.getIngredients(VanillaTypes.ITEM_STACK).collect(Collectors.toList())));
PacketHandler.sendToServer(new PacketGhostSlot(container.getTile().getBlockPos(), stacks)); PacketHandler.sendToServer(new PacketGhostSlot(container.getTile().getBlockPos(), stacks));
return null; return null;
} }

View file

@ -73,12 +73,12 @@ public class JEIPrettyPipesPlugin implements IModPlugin {
var screen = event.getScreen(); var screen = event.getScreen();
if (!(screen instanceof ItemTerminalGui terminal)) if (!(screen instanceof ItemTerminalGui terminal))
return; return;
terminal.addRenderableWidget(this.jeiSyncButton = new Button(terminal.getGuiLeft() - 22, terminal.getGuiTop() + 44, 20, 20, Component.literal(""), button -> { terminal.addRenderableWidget(this.jeiSyncButton = Button.builder(Component.literal(""), button -> {
var preferences = PlayerPrefs.get(); var preferences = PlayerPrefs.get();
preferences.syncJei = !preferences.syncJei; preferences.syncJei = !preferences.syncJei;
preferences.save(); preferences.save();
terminal.updateWidgets(); terminal.updateWidgets();
})); }).bounds(terminal.getGuiLeft() - 22, terminal.getGuiTop() + 44, 20, 20).build());
if (PlayerPrefs.get().syncJei) if (PlayerPrefs.get().syncJei)
terminal.search.setValue(this.runtime.getIngredientFilter().getFilterText()); terminal.search.setValue(this.runtime.getIngredientFilter().getFilterText());
} }
@ -91,7 +91,7 @@ public class JEIPrettyPipesPlugin implements IModPlugin {
var sync = PlayerPrefs.get().syncJei; var sync = PlayerPrefs.get().syncJei;
if (event instanceof ScreenEvent.Render.Post) { if (event instanceof ScreenEvent.Render.Post) {
if (this.jeiSyncButton.isHoveredOrFocused()) if (this.jeiSyncButton.isHoveredOrFocused())
terminal.renderTooltip(event.getPoseStack(), Component.translatable("info." + PrettyPipes.ID + ".sync_jei." + (sync ? "on" : "off")), event.getMouseX(), event.getMouseY()); event.getGuiGraphics().renderTooltip(terminal.getMinecraft().font, Component.translatable("info." + PrettyPipes.ID + ".sync_jei." + (sync ? "on" : "off")), event.getMouseX(), event.getMouseY());
} else if (event instanceof ScreenEvent.Render.Pre) { } else if (event instanceof ScreenEvent.Render.Pre) {
this.jeiSyncButton.setMessage(Component.literal((sync ? ChatFormatting.GREEN : ChatFormatting.RED) + "J")); this.jeiSyncButton.setMessage(Component.literal((sync ? ChatFormatting.GREEN : ChatFormatting.RED) + "J"));
} }

View file

@ -10,6 +10,7 @@ import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundEvents;
import net.minecraft.tags.DamageTypeTags;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResult;
import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageSource;
@ -48,19 +49,19 @@ public class PipeFrameEntity extends ItemFrame implements IEntityAdditionalSpawn
@Override @Override
public void tick() { public void tick() {
super.tick(); super.tick();
if (this.level.isClientSide) if (this.level().isClientSide)
return; return;
if (this.tickCount % 40 != 0) if (this.tickCount % 40 != 0)
return; return;
var network = PipeNetwork.get(this.level); var network = PipeNetwork.get(this.level());
var attached = PipeFrameEntity.getAttachedPipe(this.level, this.pos, this.direction); var attached = PipeFrameEntity.getAttachedPipe(this.level(), this.pos, this.direction);
if (attached != null) { if (attached != null) {
var node = network.getNodeFromPipe(attached); var node = network.getNodeFromPipe(attached);
if (node != null) { if (node != null) {
var stack = this.getItem(); var stack = this.getItem();
if (!stack.isEmpty()) { if (!stack.isEmpty()) {
var items = network.getOrderedNetworkItems(node); var items = network.getOrderedNetworkItems(node);
var amount = items.stream().mapToInt(i -> i.getItemAmount(this.level, stack)).sum(); var amount = items.stream().mapToInt(i -> i.getItemAmount(this.level(), stack)).sum();
this.entityData.set(PipeFrameEntity.AMOUNT, amount); this.entityData.set(PipeFrameEntity.AMOUNT, amount);
return; return;
} }
@ -71,7 +72,7 @@ public class PipeFrameEntity extends ItemFrame implements IEntityAdditionalSpawn
@Override @Override
public boolean survives() { public boolean survives() {
return super.survives() && PipeFrameEntity.canPlace(this.level, this.pos, this.direction); return super.survives() && PipeFrameEntity.canPlace(this.level(), this.pos, this.direction);
} }
private static BlockPos getAttachedPipe(Level world, BlockPos pos, Direction direction) { private static BlockPos getAttachedPipe(Level world, BlockPos pos, Direction direction) {
@ -96,8 +97,8 @@ public class PipeFrameEntity extends ItemFrame implements IEntityAdditionalSpawn
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (this.isInvulnerableTo(source)) { if (this.isInvulnerableTo(source)) {
return false; return false;
} else if (!source.isExplosion() && !this.getItem().isEmpty()) { } else if (!source.is(DamageTypeTags.IS_EXPLOSION) && !this.getItem().isEmpty()) {
if (!this.level.isClientSide) { if (!this.level().isClientSide) {
this.dropItemOrSelf(source.getDirectEntity(), false); this.dropItemOrSelf(source.getDirectEntity(), false);
this.playSound(SoundEvents.ITEM_FRAME_REMOVE_ITEM, 1.0F, 1.0F); this.playSound(SoundEvents.ITEM_FRAME_REMOVE_ITEM, 1.0F, 1.0F);
} }
@ -115,7 +116,7 @@ public class PipeFrameEntity extends ItemFrame implements IEntityAdditionalSpawn
} }
private void dropItemOrSelf(@Nullable Entity entityIn, boolean b) { private void dropItemOrSelf(@Nullable Entity entityIn, boolean b) {
if (!this.level.getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { if (!this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) {
if (entityIn == null) if (entityIn == null)
this.getItem().setEntityRepresentation(null); this.getItem().setEntityRepresentation(null);
} else { } else {

View file

@ -1,7 +1,8 @@
package de.ellpeck.prettypipes.entities; package de.ellpeck.prettypipes.entities;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
import net.minecraft.client.gui.Font;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.ItemFrameRenderer; import net.minecraft.client.renderer.entity.ItemFrameRenderer;
@ -20,17 +21,17 @@ public class PipeFrameRenderer extends ItemFrameRenderer<PipeFrameEntity> {
var vec3d = this.getRenderOffset(entityIn, partialTicks); var vec3d = this.getRenderOffset(entityIn, partialTicks);
matrixStackIn.translate(-vec3d.x, -vec3d.y, -vec3d.z); matrixStackIn.translate(-vec3d.x, -vec3d.y, -vec3d.z);
matrixStackIn.translate(direction.getStepX() * 0.46875, direction.getStepY() * 0.46875, direction.getStepZ() * 0.46875); matrixStackIn.translate(direction.getStepX() * 0.46875, direction.getStepY() * 0.46875, direction.getStepZ() * 0.46875);
matrixStackIn.mulPose(Vector3f.XP.rotationDegrees(entityIn.getXRot())); matrixStackIn.mulPose(Axis.XP.rotationDegrees(entityIn.getXRot()));
matrixStackIn.mulPose(Vector3f.YP.rotationDegrees(180.0F - entityIn.getYRot())); matrixStackIn.mulPose(Axis.YP.rotationDegrees(180.0F - entityIn.getYRot()));
var font = this.getFont(); var font = this.getFont();
var amount = entityIn.getAmount(); var amount = entityIn.getAmount();
var ammountStrg = amount < 0 ? "?" : String.valueOf(amount); var amountStrg = amount < 0 ? "?" : String.valueOf(amount);
var x = 0.5F - font.width(ammountStrg) / 2F; var x = 0.5F - font.width(amountStrg) / 2F;
var matrix4f = matrixStackIn.last().pose(); var matrix4f = matrixStackIn.last().pose();
matrixStackIn.translate(0, 0.285F, 0.415F); matrixStackIn.translate(0, 0.285F, 0.415F);
matrixStackIn.scale(-0.02F, -0.02F, 0.02F); matrixStackIn.scale(-0.02F, -0.02F, 0.02F);
font.drawInBatch(ammountStrg, x, 0, 0xFFFFFF, true, matrix4f, bufferIn, false, 0, packedLightIn); font.drawInBatch(amountStrg, x, 0, 0xFFFFFF, true, matrix4f, bufferIn, Font.DisplayMode.NORMAL, 0, packedLightIn);
matrixStackIn.popPose(); matrixStackIn.popPose();
} }

View file

@ -1,6 +1,5 @@
package de.ellpeck.prettypipes.items; package de.ellpeck.prettypipes.items;
import de.ellpeck.prettypipes.Registry;
import de.ellpeck.prettypipes.Utility; import de.ellpeck.prettypipes.Utility;
import de.ellpeck.prettypipes.misc.DirectionSelector; import de.ellpeck.prettypipes.misc.DirectionSelector;
import de.ellpeck.prettypipes.misc.ItemFilter; import de.ellpeck.prettypipes.misc.ItemFilter;
@ -30,7 +29,7 @@ public abstract class ModuleItem extends Item implements IModule {
private final String name; private final String name;
public ModuleItem(String name) { public ModuleItem(String name) {
super(new Properties().tab(Registry.TAB).stacksTo(16)); super(new Properties().stacksTo(16));
this.name = name; this.name = name;
} }

View file

@ -23,7 +23,7 @@ import java.util.List;
public class PipeFrameItem extends Item { public class PipeFrameItem extends Item {
public PipeFrameItem() { public PipeFrameItem() {
super(new Properties().tab(Registry.TAB)); super(new Properties());
} }
// HangingEntityItem copypasta mostly, since it hardcodes the entities bleh // HangingEntityItem copypasta mostly, since it hardcodes the entities bleh
@ -60,7 +60,7 @@ public class PipeFrameItem extends Item {
} }
protected boolean canPlace(Player playerIn, Direction directionIn, ItemStack itemStackIn, BlockPos posIn) { protected boolean canPlace(Player playerIn, Direction directionIn, ItemStack itemStackIn, BlockPos posIn) {
return !directionIn.getAxis().isVertical() && playerIn.mayUseItemAt(posIn, directionIn, itemStackIn) && PipeFrameEntity.canPlace(playerIn.level, posIn, directionIn); return !directionIn.getAxis().isVertical() && playerIn.mayUseItemAt(posIn, directionIn, itemStackIn) && PipeFrameEntity.canPlace(playerIn.level(), posIn, directionIn);
} }
@Override @Override

View file

@ -1,6 +1,5 @@
package de.ellpeck.prettypipes.items; package de.ellpeck.prettypipes.items;
import de.ellpeck.prettypipes.Registry;
import de.ellpeck.prettypipes.Utility; import de.ellpeck.prettypipes.Utility;
import de.ellpeck.prettypipes.pipe.ConnectionType; import de.ellpeck.prettypipes.pipe.ConnectionType;
import de.ellpeck.prettypipes.pipe.PipeBlock; import de.ellpeck.prettypipes.pipe.PipeBlock;
@ -27,7 +26,7 @@ import java.util.List;
public class WrenchItem extends Item { public class WrenchItem extends Item {
public WrenchItem() { public WrenchItem() {
super(new Item.Properties().stacksTo(1).tab(Registry.TAB)); super(new Item.Properties().stacksTo(1));
} }
@Override @Override

View file

@ -33,7 +33,7 @@ public final class Events {
var dump = PipeNetwork.get(source.getLevel()).toString(); var dump = PipeNetwork.get(source.getLevel()).toString();
try { try {
Files.writeString(file, dump, StandardCharsets.UTF_8); Files.writeString(file, dump, StandardCharsets.UTF_8);
source.sendSuccess(Component.literal("Wrote network dump to file " + file.toAbsolutePath()), true); source.sendSuccess(() -> Component.literal("Wrote network dump to file " + file.toAbsolutePath()), true);
} catch (IOException e) { } catch (IOException e) {
source.sendFailure(Component.literal("Failed to write network dump to file " + file.toAbsolutePath())); source.sendFailure(Component.literal("Failed to write network dump to file " + file.toAbsolutePath()));
return -1; return -1;
@ -43,13 +43,13 @@ public final class Events {
.then(Commands.literal("uncache").executes(c -> { .then(Commands.literal("uncache").executes(c -> {
var source = c.getSource(); var source = c.getSource();
PipeNetwork.get(source.getLevel()).clearCaches(); PipeNetwork.get(source.getLevel()).clearCaches();
source.sendSuccess(Component.literal("Cleared all pipe caches in the world"), true); source.sendSuccess(() -> Component.literal("Cleared all pipe caches in the world"), true);
return 0; return 0;
})) }))
.then(Commands.literal("unlock").executes(c -> { .then(Commands.literal("unlock").executes(c -> {
var source = c.getSource(); var source = c.getSource();
PipeNetwork.get(source.getLevel()).unlock(); PipeNetwork.get(source.getLevel()).unlock();
source.sendSuccess(Component.literal("Resolved all network locks in the world"), true); source.sendSuccess(() -> Component.literal("Resolved all network locks in the world"), true);
return 0; return 0;
}))); })));
} }

View file

@ -10,7 +10,8 @@ import java.util.function.Supplier;
public class ItemEquality { public class ItemEquality {
public static final ItemEquality DAMAGE = new ItemEquality((stack, filter) -> stack.getDamageValue() == filter.getDamageValue(), false, Type.DAMAGE); public static final ItemEquality DAMAGE = new ItemEquality((stack, filter) -> stack.getDamageValue() == filter.getDamageValue(), false, Type.DAMAGE);
public static final ItemEquality NBT = new ItemEquality(ItemStack::tagMatches, false, Type.NBT); // TODO see if this tagMatches replacement is good enough?
public static final ItemEquality NBT = new ItemEquality(ItemStack::areShareTagsEqual, false, Type.NBT);
public static final ItemEquality MOD = new ItemEquality((stack, filter) -> stack.getItem().getCreatorModId(stack).equals(filter.getItem().getCreatorModId(filter)), true, Type.MOD); public static final ItemEquality MOD = new ItemEquality((stack, filter) -> stack.getItem().getCreatorModId(stack).equals(filter.getItem().getCreatorModId(filter)), true, Type.MOD);
public final Type type; public final Type type;
@ -28,7 +29,7 @@ public class ItemEquality {
} }
public static boolean compareItems(ItemStack stack, ItemStack filter, ItemEquality... types) { public static boolean compareItems(ItemStack stack, ItemStack filter, ItemEquality... types) {
var equal = ItemStack.isSameIgnoreDurability(stack, filter); var equal = ItemStack.isSameItem(stack, filter);
if (types.length <= 0) if (types.length <= 0)
return equal; return equal;
for (var type : types) { for (var type : types) {

View file

@ -1,6 +1,5 @@
package de.ellpeck.prettypipes.misc; package de.ellpeck.prettypipes.misc;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.PrettyPipes;
import de.ellpeck.prettypipes.packets.PacketButton; import de.ellpeck.prettypipes.packets.PacketButton;
import de.ellpeck.prettypipes.pipe.PipeBlockEntity; import de.ellpeck.prettypipes.pipe.PipeBlockEntity;
@ -8,6 +7,7 @@ import de.ellpeck.prettypipes.pipe.modules.modifier.FilterModifierModuleItem;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.Tooltip;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@ -52,23 +52,13 @@ public class ItemFilter extends ItemStackHandler {
List<AbstractWidget> buttons = new ArrayList<>(); List<AbstractWidget> buttons = new ArrayList<>();
if (this.canModifyWhitelist) { if (this.canModifyWhitelist) {
var whitelistText = (Supplier<String>) () -> "info." + PrettyPipes.ID + "." + (this.isWhitelist ? "whitelist" : "blacklist"); var whitelistText = (Supplier<String>) () -> "info." + PrettyPipes.ID + "." + (this.isWhitelist ? "whitelist" : "blacklist");
buttons.add(new Button(x - 20, y, 20, 20, Component.translatable(whitelistText.get()), button -> { buttons.add(Button.builder(Component.translatable(whitelistText.get()), button -> {
PacketButton.sendAndExecute(this.pipe.getBlockPos(), PacketButton.ButtonResult.FILTER_CHANGE, 0); PacketButton.sendAndExecute(this.pipe.getBlockPos(), PacketButton.ButtonResult.FILTER_CHANGE, 0);
button.setMessage(Component.translatable(whitelistText.get())); button.setMessage(Component.translatable(whitelistText.get()));
}) { }).bounds(x - 20, y, 20, 20).tooltip(Tooltip.create(Component.translatable(whitelistText.get() + ".description").withStyle(ChatFormatting.GRAY))).build());
@Override
public void renderToolTip(PoseStack matrix, int x, int y) {
gui.renderTooltip(matrix, Component.translatable(whitelistText.get() + ".description").withStyle(ChatFormatting.GRAY), x, y);
}
});
} }
if (this.canPopulateFromInventories) { if (this.canPopulateFromInventories) {
buttons.add(new Button(x - 42, y, 20, 20, Component.translatable("info." + PrettyPipes.ID + ".populate"), button -> PacketButton.sendAndExecute(this.pipe.getBlockPos(), PacketButton.ButtonResult.FILTER_CHANGE, 1)) { buttons.add(Button.builder(Component.translatable("info." + PrettyPipes.ID + ".populate"), button -> PacketButton.sendAndExecute(this.pipe.getBlockPos(), PacketButton.ButtonResult.FILTER_CHANGE, 1)).bounds(x - 42, y, 20, 20).tooltip(Tooltip.create(Component.translatable("info." + PrettyPipes.ID + ".populate.description").withStyle(ChatFormatting.GRAY))).build());
@Override
public void renderToolTip(PoseStack matrix, int x, int y) {
gui.renderTooltip(matrix, Component.translatable("info." + PrettyPipes.ID + ".populate.description").withStyle(ChatFormatting.GRAY), x, y);
}
});
} }
return buttons; return buttons;
} }

View file

@ -1,12 +1,12 @@
package de.ellpeck.prettypipes.misc; package de.ellpeck.prettypipes.misc;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.terminal.containers.ItemTerminalGui; import de.ellpeck.prettypipes.terminal.containers.ItemTerminalGui;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.gui.narration.NarrationElementOutput;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -37,46 +37,44 @@ public class ItemTerminalWidget extends AbstractWidget {
} }
@Override @Override
public void renderButton(PoseStack matrix, int mouseX, int mouseY, float partialTicks) { protected void renderWidget(GuiGraphics graphics, int p_268034_, int p_268009_, float p_268085_) {
var mc = this.screen.getMinecraft(); var mc = this.screen.getMinecraft();
var renderer = mc.getItemRenderer(); var renderer = mc.getItemRenderer();
this.setBlitOffset(100); // TODO test this new blit offset replacement?
renderer.blitOffset = 100; graphics.pose().translate(0, 0, 100);
if (this.selected) if (this.selected)
GuiComponent.fill(matrix, this.x, this.y, this.x + 16, this.y + 16, -2130706433); graphics.fill(this.getX(), this.getY(), this.getX() + 16, this.getY() + 16, -2130706433);
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
renderer.renderGuiItem(this.stack, this.x, this.y); graphics.renderItem(this.stack, this.getX(), this.getY());
var amount = !this.craftable ? this.stack.getCount() : 0; var amount = !this.craftable ? this.stack.getCount() : 0;
var amountStrg = this.stack.getCount() >= 1000 ? amount / 1000 + "k" : String.valueOf(amount); var amountStrg = this.stack.getCount() >= 1000 ? amount / 1000 + "k" : String.valueOf(amount);
renderer.renderGuiItemDecorations(mc.font, this.stack, this.x, this.y, amountStrg); graphics.renderItemDecorations(mc.font, this.stack, this.getX(), this.getY(), amountStrg);
renderer.blitOffset = 0; graphics.pose().translate(0, 0, -100);
this.setBlitOffset(0);
if (this.isHoveredOrFocused()) { if (this.isHoveredOrFocused()) {
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
RenderSystem.colorMask(true, true, true, false); RenderSystem.colorMask(true, true, true, false);
this.fillGradient(matrix, this.x, this.y, this.x + 16, this.y + 16, -2130706433, -2130706433); graphics.fillGradient(this.getX(), this.getY(), this.getX() + 16, this.getY() + 16, -2130706433, -2130706433);
RenderSystem.colorMask(true, true, true, true); RenderSystem.colorMask(true, true, true, true);
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
} }
} }
@Override public void renderToolTip(GuiGraphics graphics, int mouseX, int mouseY) {
public void renderToolTip(PoseStack matrix, int mouseX, int mouseY) {
if (this.visible && this.isHoveredOrFocused()) { if (this.visible && this.isHoveredOrFocused()) {
var tooltip = this.screen.getTooltipFromItem(this.stack); var tooltip = Screen.getTooltipFromItem(this.screen.getMinecraft(), this.stack);
if (this.stack.getCount() >= 1000) { if (this.stack.getCount() >= 1000) {
var comp = tooltip.get(0); var comp = tooltip.get(0);
if (comp instanceof MutableComponent m) { if (comp instanceof MutableComponent m)
tooltip.set(0, m.append(Component.literal(" (" + this.stack.getCount() + ')').withStyle(ChatFormatting.BOLD))); tooltip.set(0, m.append(Component.literal(" (" + this.stack.getCount() + ')').withStyle(ChatFormatting.BOLD)));
}
} }
this.screen.renderTooltip(matrix, tooltip, Optional.empty(), mouseX, mouseY); graphics.renderTooltip(this.screen.getMinecraft().font, tooltip, Optional.empty(), mouseX, mouseY);
} }
} }
@Override @Override
public void updateNarration(NarrationElementOutput output) { public void updateWidgetNarration(NarrationElementOutput output) {
this.defaultButtonNarrationText(output); this.defaultButtonNarrationText(output);
} }
} }

View file

@ -7,7 +7,6 @@ import de.ellpeck.prettypipes.pipe.IPipeItem;
import de.ellpeck.prettypipes.pipe.PipeBlockEntity; import de.ellpeck.prettypipes.pipe.PipeBlockEntity;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
@ -18,6 +17,7 @@ import net.minecraft.util.Mth;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
@ -104,7 +104,7 @@ public class PipeItem implements IPipeItem {
var currSpeed = Math.min(0.25F, motionLeft); var currSpeed = Math.min(0.25F, motionLeft);
motionLeft -= currSpeed; motionLeft -= currSpeed;
var myPos = new BlockPos(this.x, this.y, this.z); var myPos = BlockPos.containing(this.x, this.y, this.z);
if (!myPos.equals(currPipe.getBlockPos()) && (currPipe.getBlockPos().equals(this.getDestPipe()) || !myPos.equals(this.startInventory))) { if (!myPos.equals(currPipe.getBlockPos()) && (currPipe.getBlockPos().equals(this.getDestPipe()) || !myPos.equals(this.startInventory))) {
// we're done with the current pipe, so switch to the next one // we're done with the current pipe, so switch to the next one
currPipe.getItems().remove(this); currPipe.getItems().remove(this);
@ -196,7 +196,7 @@ public class PipeItem implements IPipeItem {
@Override @Override
public void drop(Level world, ItemStack stack) { public void drop(Level world, ItemStack stack) {
var item = new ItemEntity(world, this.x, this.y, this.z, stack.copy()); var item = new ItemEntity(world, this.x, this.y, this.z, stack.copy());
item.level.addFreshEntity(item); item.level().addFreshEntity(item);
} }
protected ItemStack store(PipeBlockEntity currPipe) { protected ItemStack store(PipeBlockEntity currPipe) {
@ -312,7 +312,7 @@ public class PipeItem implements IPipeItem {
(random.nextFloat() * 2.0F - 1.0F) * 0.25F * 0.5F, (random.nextFloat() * 2.0F - 1.0F) * 0.25F * 0.5F,
(random.nextFloat() * 2.0F - 1.0F) * 0.25F * 0.5F); (random.nextFloat() * 2.0F - 1.0F) * 0.25F * 0.5F);
} }
Minecraft.getInstance().getItemRenderer().renderStatic(this.stack, ItemTransforms.TransformType.GROUND, light, overlay, matrixStack, source, 0); Minecraft.getInstance().getItemRenderer().renderStatic(this.stack, ItemDisplayContext.GROUND, light, overlay, matrixStack, source, tile.getLevel(), 0);
matrixStack.popPose(); matrixStack.popPose();
} }
} }

View file

@ -77,7 +77,7 @@ public class PacketButton {
public enum ButtonResult { public enum ButtonResult {
PIPE_TAB((pos, data, player) -> { PIPE_TAB((pos, data, player) -> {
var tile = Utility.getBlockEntity(PipeBlockEntity.class, player.level, pos); var tile = Utility.getBlockEntity(PipeBlockEntity.class, player.level(), pos);
if (data[0] < 0) { if (data[0] < 0) {
NetworkHooks.openScreen((ServerPlayer) player, tile, pos); NetworkHooks.openScreen((ServerPlayer) player, tile, pos);
} else { } else {
@ -113,11 +113,11 @@ public class PacketButton {
StackSizeModuleItem.setMaxStackSize(container.moduleStack, data[0]); StackSizeModuleItem.setMaxStackSize(container.moduleStack, data[0]);
}), }),
CRAFT_TERMINAL_REQUEST((pos, data, player) -> { CRAFT_TERMINAL_REQUEST((pos, data, player) -> {
var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, player.level, pos); var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, player.level(), pos);
tile.requestCraftingItems(player, data[0], data[1] > 0); tile.requestCraftingItems(player, data[0], data[1] > 0);
}), }),
CANCEL_CRAFTING((pos, data, player) -> { CANCEL_CRAFTING((pos, data, player) -> {
var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level, pos); var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level(), pos);
tile.cancelCrafting(); tile.cancelCrafting();
}), }),
TAG_FILTER((pos, data, player) -> { TAG_FILTER((pos, data, player) -> {

View file

@ -6,7 +6,7 @@ import de.ellpeck.prettypipes.Utility;
import de.ellpeck.prettypipes.terminal.CraftingTerminalBlockEntity; import de.ellpeck.prettypipes.terminal.CraftingTerminalBlockEntity;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
@ -14,6 +14,7 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import java.util.ArrayList; import java.util.ArrayList;
@ -55,7 +56,7 @@ public class PacketGhostSlot {
@SuppressWarnings("Convert2Lambda") @SuppressWarnings("Convert2Lambda")
public static void onMessage(PacketGhostSlot message, Supplier<NetworkEvent.Context> ctx) { public static void onMessage(PacketGhostSlot message, Supplier<NetworkEvent.Context> ctx) {
var doIt = (Consumer<Player>) p -> { var doIt = (Consumer<Player>) p -> {
var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, p.level, message.pos); var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, p.level(), message.pos);
if (tile != null) if (tile != null)
tile.setGhostItems(message.stacks); tile.setGhostItems(message.stacks);
}; };
@ -88,8 +89,8 @@ public class PacketGhostSlot {
private final List<ItemStack> stacks; private final List<ItemStack> stacks;
private final TagKey<Item> tag; private final TagKey<Item> tag;
public Entry(List<ItemStack> stacks) { public Entry(Level level, List<ItemStack> stacks) {
var tag = Entry.getTagForStacks(stacks); var tag = Entry.getTagForStacks(level, stacks);
if (tag != null) { if (tag != null) {
this.stacks = null; this.stacks = null;
this.tag = tag; this.tag = tag;
@ -107,14 +108,14 @@ public class PacketGhostSlot {
this.stacks.add(buf.readItem()); this.stacks.add(buf.readItem());
} else { } else {
this.stacks = null; this.stacks = null;
this.tag = TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation(buf.readUtf())); this.tag = TagKey.create(Registries.ITEM, new ResourceLocation(buf.readUtf()));
} }
} }
public List<ItemStack> getStacks() { public List<ItemStack> getStacks(Level level) {
if (this.stacks != null) if (this.stacks != null)
return this.stacks; return this.stacks;
return Streams.stream(Registry.ITEM.getTagOrEmpty(this.tag).iterator()) return Streams.stream(level.registryAccess().registry(Registries.ITEM).get().getTagOrEmpty(this.tag).iterator())
.filter(h -> h.value() != null & h.value() != Items.AIR) .filter(h -> h.value() != null & h.value() != Items.AIR)
.map(h -> new ItemStack(h.value())).collect(Collectors.toList()); .map(h -> new ItemStack(h.value())).collect(Collectors.toList());
} }
@ -132,8 +133,8 @@ public class PacketGhostSlot {
return buf; return buf;
} }
private static TagKey<Item> getTagForStacks(List<ItemStack> stacks) { private static TagKey<Item> getTagForStacks(Level level, List<ItemStack> stacks) {
return Registry.ITEM.getTags().filter(e -> { return level.registryAccess().registry(Registries.ITEM).get().getTags().filter(e -> {
var tag = e.getSecond(); var tag = e.getSecond();
if (tag.size() != stacks.size()) if (tag.size() != stacks.size())
return false; return false;

View file

@ -51,7 +51,7 @@ public class PacketRequest {
@Override @Override
public void run() { public void run() {
Player player = ctx.get().getSender(); Player player = ctx.get().getSender();
var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level, message.pos); var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level(), message.pos);
message.stack.setCount(message.amount); message.stack.setCount(message.amount);
tile.requestItem(player, message.stack, message.nbtHash); tile.requestItem(player, message.stack, message.nbtHash);
} }

View file

@ -28,7 +28,6 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.BooleanOp;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
@ -66,7 +65,7 @@ public class PipeBlock extends BaseEntityBlock {
} }
public PipeBlock() { public PipeBlock() {
super(Block.Properties.of(Material.STONE).strength(2).sound(SoundType.STONE).noOcclusion()); super(Block.Properties.of().strength(2).sound(SoundType.STONE).noOcclusion());
var state = this.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false); var state = this.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false);
for (var prop : PipeBlock.DIRECTIONS.values()) for (var prop : PipeBlock.DIRECTIONS.values())
@ -225,8 +224,9 @@ public class PipeBlock extends BaseEntityBlock {
protected static boolean hasLegsTo(Level world, BlockState state, BlockPos pos, Direction direction) { protected static boolean hasLegsTo(Level world, BlockState state, BlockPos pos, Direction direction) {
if (state.getBlock() instanceof WallBlock || state.getBlock() instanceof FenceBlock) if (state.getBlock() instanceof WallBlock || state.getBlock() instanceof FenceBlock)
return direction == Direction.DOWN; return direction == Direction.DOWN;
if (state.getMaterial() == Material.STONE || state.getMaterial() == Material.METAL) // TODO figure out new condition for legs now that materials are gone
return Block.canSupportCenter(world, pos, direction.getOpposite()); /* if (state.getMaterial() == Material.STONE || state.getMaterial() == Material.METAL)
return Block.canSupportCenter(world, pos, direction.getOpposite());*/
return false; return false;
} }

View file

@ -11,6 +11,7 @@ import de.ellpeck.prettypipes.pipe.containers.MainPipeContainer;
import de.ellpeck.prettypipes.pressurizer.PressurizerBlockEntity; import de.ellpeck.prettypipes.pressurizer.PressurizerBlockEntity;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.NbtUtils;
@ -116,7 +117,7 @@ public class PipeBlockEntity extends BlockEntity implements MenuProvider, IPipeC
public void load(CompoundTag compound) { public void load(CompoundTag compound) {
this.modules.deserializeNBT(compound.getCompound("modules")); this.modules.deserializeNBT(compound.getCompound("modules"));
this.moduleDropCheck = compound.getInt("module_drop_check"); this.moduleDropCheck = compound.getInt("module_drop_check");
this.cover = compound.contains("cover") ? NbtUtils.readBlockState(compound.getCompound("cover")) : null; this.cover = compound.contains("cover") ? NbtUtils.readBlockState(this.level.holderLookup(Registries.BLOCK), compound.getCompound("cover")) : null;
this.craftIngredientRequests.clear(); this.craftIngredientRequests.clear();
this.craftIngredientRequests.addAll(Utility.deserializeAll(compound.getList("requests", Tag.TAG_COMPOUND), NetworkLock::new)); this.craftIngredientRequests.addAll(Utility.deserializeAll(compound.getList("requests", Tag.TAG_COMPOUND), NetworkLock::new));
this.craftResultRequests.clear(); this.craftResultRequests.clear();

View file

@ -24,7 +24,7 @@ public abstract class AbstractPipeContainer<T extends IModule> extends AbstractC
public AbstractPipeContainer(@Nullable MenuType<?> type, int id, Player player, BlockPos pos, int moduleIndex) { public AbstractPipeContainer(@Nullable MenuType<?> type, int id, Player player, BlockPos pos, int moduleIndex) {
super(type, id); super(type, id);
this.tile = Utility.getBlockEntity(PipeBlockEntity.class, player.level, pos); this.tile = Utility.getBlockEntity(PipeBlockEntity.class, player.level(), pos);
this.moduleStack = moduleIndex < 0 ? null : this.tile.modules.getStackInSlot(moduleIndex); this.moduleStack = moduleIndex < 0 ? null : this.tile.modules.getStackInSlot(moduleIndex);
this.module = moduleIndex < 0 ? null : (T) this.moduleStack.getItem(); this.module = moduleIndex < 0 ? null : (T) this.moduleStack.getItem();
this.moduleIndex = moduleIndex; this.moduleIndex = moduleIndex;

View file

@ -1,15 +1,12 @@
package de.ellpeck.prettypipes.pipe.containers; package de.ellpeck.prettypipes.pipe.containers;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.PrettyPipes;
import de.ellpeck.prettypipes.Registry; import de.ellpeck.prettypipes.Registry;
import de.ellpeck.prettypipes.items.IModule; import de.ellpeck.prettypipes.items.IModule;
import de.ellpeck.prettypipes.packets.PacketButton; import de.ellpeck.prettypipes.packets.PacketButton;
import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.packets.PacketHandler;
import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -56,39 +53,38 @@ public abstract class AbstractPipeGui<T extends AbstractPipeContainer<?>> extend
} }
@Override @Override
public void render(PoseStack matrix, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(matrix); this.renderBackground(graphics);
super.render(matrix, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks);
for (var widget : this.renderables) { for (var widget : this.renderables) {
if (widget instanceof AbstractWidget abstractWidget) { // TDOO render widget tooltips?
/* if (widget instanceof AbstractWidget abstractWidget) {
if (abstractWidget.isHoveredOrFocused()) if (abstractWidget.isHoveredOrFocused())
abstractWidget.renderToolTip(matrix, mouseX, mouseY); abstractWidget.renderToolTip(matrix, mouseX, mouseY);
} }*/
} }
this.renderTooltip(matrix, mouseX, mouseY); this.renderTooltip(graphics, mouseX, mouseY);
} }
@Override @Override
protected void renderLabels(PoseStack matrix, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) {
this.font.draw(matrix, this.playerInventoryTitle.getString(), 8, this.imageHeight - 96 + 2, 4210752); graphics.drawString(this.font, this.playerInventoryTitle.getString(), 8, this.imageHeight - 96 + 2, 4210752);
this.font.draw(matrix, this.title.getString(), 8, 6 + 32, 4210752); graphics.drawString(this.font, this.title.getString(), 8, 6 + 32, 4210752);
for (var tab : this.tabs) for (var tab : this.tabs)
tab.drawForeground(matrix, mouseX, mouseY); tab.drawForeground(graphics, mouseX, mouseY);
} }
@Override @Override
protected void renderBg(PoseStack matrix, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) {
RenderSystem.setShader(GameRenderer::getPositionTexShader); graphics.blit(AbstractPipeGui.TEXTURE, this.leftPos, this.topPos + 32, 0, 0, 176, 171);
RenderSystem.setShaderTexture(0, AbstractPipeGui.TEXTURE);
this.blit(matrix, this.leftPos, this.topPos + 32, 0, 0, 176, 171);
for (var tab : this.tabs) for (var tab : this.tabs)
tab.draw(matrix); tab.draw(graphics);
// draw the slots since we're using a blank ui // draw the slots since we're using a blank ui
for (var slot : this.menu.slots) { for (var slot : this.menu.slots) {
if (slot instanceof SlotItemHandler) if (slot instanceof SlotItemHandler)
this.blit(matrix, this.leftPos + slot.x - 1, this.topPos + slot.y - 1, 176, 62, 18, 18); graphics.blit(AbstractPipeGui.TEXTURE, this.leftPos + slot.x - 1, this.topPos + slot.y - 1, 176, 62, 18, 18);
} }
} }
@ -128,7 +124,7 @@ public abstract class AbstractPipeGui<T extends AbstractPipeContainer<?>> extend
this.y = AbstractPipeGui.this.topPos; this.y = AbstractPipeGui.this.topPos;
} }
private void draw(PoseStack matrix) { private void draw(GuiGraphics graphics) {
var y = 2; var y = 2;
var v = 0; var v = 0;
var height = 30; var height = 30;
@ -139,17 +135,14 @@ public abstract class AbstractPipeGui<T extends AbstractPipeContainer<?>> extend
height = 32; height = 32;
itemOffset = 7; itemOffset = 7;
} }
AbstractPipeGui.this.blit(matrix, this.x, this.y + y, 176, v, 28, height); graphics.blit(AbstractPipeGui.TEXTURE, this.x, this.y + y, 176, v, 28, height);
graphics.renderItem(this.moduleStack, this.x + 6, this.y + itemOffset);
AbstractPipeGui.this.itemRenderer.renderGuiItem(this.moduleStack, this.x + 6, this.y + itemOffset);
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, AbstractPipeGui.TEXTURE);
} }
private void drawForeground(PoseStack matrix, int mouseX, int mouseY) { private void drawForeground(GuiGraphics graphics, int mouseX, int mouseY) {
if (mouseX < this.x || mouseY < this.y || mouseX >= this.x + 28 || mouseY >= this.y + 32) if (mouseX < this.x || mouseY < this.y || mouseX >= this.x + 28 || mouseY >= this.y + 32)
return; return;
AbstractPipeGui.this.renderTooltip(matrix, this.moduleStack.getHoverName(), mouseX - AbstractPipeGui.this.leftPos, mouseY - AbstractPipeGui.this.topPos); graphics.renderTooltip(AbstractPipeGui.this.font, this.moduleStack.getHoverName(), mouseX - AbstractPipeGui.this.leftPos, mouseY - AbstractPipeGui.this.topPos);
} }
private boolean onClicked(double mouseX, double mouseY, int button) { private boolean onClicked(double mouseX, double mouseY, int button) {

View file

@ -1,9 +1,7 @@
package de.ellpeck.prettypipes.pipe.modules.craft; package de.ellpeck.prettypipes.pipe.modules.craft;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.pipe.containers.AbstractPipeGui; import de.ellpeck.prettypipes.pipe.containers.AbstractPipeGui;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
@ -14,10 +12,8 @@ public class CraftingModuleGui extends AbstractPipeGui<CraftingModuleContainer>
} }
@Override @Override
protected void renderBg(PoseStack matrix, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) {
super.renderBg(matrix, partialTicks, mouseX, mouseY); super.renderBg(graphics, partialTicks, mouseX, mouseY);
RenderSystem.setShader(GameRenderer::getPositionTexShader); graphics.blit(AbstractPipeGui.TEXTURE, this.leftPos + 176 / 2 - 16 / 2, this.topPos + 32 + 18 * 2, 176, 80, 16, 16);
RenderSystem.setShaderTexture(0, AbstractPipeGui.TEXTURE);
this.blit(matrix, this.leftPos + 176 / 2 - 16 / 2, this.topPos + 32 + 18 * 2, 176, 80, 16, 16);
} }
} }

View file

@ -1,10 +1,10 @@
package de.ellpeck.prettypipes.pipe.modules.modifier; package de.ellpeck.prettypipes.pipe.modules.modifier;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.packets.PacketButton; import de.ellpeck.prettypipes.packets.PacketButton;
import de.ellpeck.prettypipes.pipe.containers.AbstractPipeGui; import de.ellpeck.prettypipes.pipe.containers.AbstractPipeGui;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -28,18 +28,18 @@ public class FilterModifierModuleGui extends AbstractPipeGui<FilterModifierModul
} }
@Override @Override
protected void renderBg(PoseStack matrix, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) {
super.renderBg(matrix, partialTicks, mouseX, mouseY); super.renderBg(graphics, partialTicks, mouseX, mouseY);
this.blit(matrix, this.leftPos + 7, this.topPos + 32 + 15, 0, 196, 162, 60); graphics.blit(AbstractPipeGui.TEXTURE, this.leftPos + 7, this.topPos + 32 + 15, 0, 196, 162, 60);
for (var tag : this.tagButtons) for (var tag : this.tagButtons)
tag.draw(matrix, mouseX, mouseY); tag.draw(graphics, mouseX, mouseY);
if (this.tags.size() >= 6) { if (this.tags.size() >= 6) {
var percentage = this.scrollOffset / (float) (this.tags.size() - 5); var percentage = this.scrollOffset / (float) (this.tags.size() - 5);
this.blit(matrix, this.leftPos + 156, this.topPos + 32 + 16 + (int) (percentage * (58 - 15)), 232, 241, 12, 15); graphics.blit(AbstractPipeGui.TEXTURE, this.leftPos + 156, this.topPos + 32 + 16 + (int) (percentage * (58 - 15)), 232, 241, 12, 15);
} else { } else {
this.blit(matrix, this.leftPos + 156, this.topPos + 32 + 16, 244, 241, 12, 15); graphics.blit(AbstractPipeGui.TEXTURE, this.leftPos + 156, this.topPos + 32 + 16, 244, 241, 12, 15);
} }
} }
@ -117,14 +117,14 @@ public class FilterModifierModuleGui extends AbstractPipeGui<FilterModifierModul
this.y = y; this.y = y;
} }
private void draw(PoseStack matrix, double mouseX, double mouseY) { private void draw(GuiGraphics graphics, double mouseX, double mouseY) {
var color = 4210752; var color = 4210752;
var text = this.tag.toString(); var text = this.tag.toString();
if (mouseX >= this.x && mouseY >= this.y && mouseX < this.x + 140 && mouseY < this.y + 12) if (mouseX >= this.x && mouseY >= this.y && mouseX < this.x + 140 && mouseY < this.y + 12)
color = 0xFFFFFF; color = 0xFFFFFF;
if (this.tag.equals(FilterModifierModuleItem.getFilterTag(FilterModifierModuleGui.this.menu.moduleStack))) if (this.tag.equals(FilterModifierModuleItem.getFilterTag(FilterModifierModuleGui.this.menu.moduleStack)))
text = ChatFormatting.BOLD + text; text = ChatFormatting.BOLD + text;
FilterModifierModuleGui.this.font.draw(matrix, text, this.x, this.y, color); graphics.drawString(FilterModifierModuleGui.this.font, text, this.x, this.y, color);
RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, AbstractPipeGui.TEXTURE); RenderSystem.setShaderTexture(0, AbstractPipeGui.TEXTURE);
} }

View file

@ -1,10 +1,10 @@
package de.ellpeck.prettypipes.pipe.modules.stacksize; package de.ellpeck.prettypipes.pipe.modules.stacksize;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.PrettyPipes;
import de.ellpeck.prettypipes.packets.PacketButton; import de.ellpeck.prettypipes.packets.PacketButton;
import de.ellpeck.prettypipes.packets.PacketButton.ButtonResult; import de.ellpeck.prettypipes.packets.PacketButton.ButtonResult;
import de.ellpeck.prettypipes.pipe.containers.AbstractPipeGui; import de.ellpeck.prettypipes.pipe.containers.AbstractPipeGui;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.resources.language.I18n; import net.minecraft.client.resources.language.I18n;
@ -43,16 +43,16 @@ public class StackSizeModuleGui extends AbstractPipeGui<StackSizeModuleContainer
PacketButton.sendAndExecute(this.menu.tile.getBlockPos(), ButtonResult.STACK_SIZE_AMOUNT, amount); PacketButton.sendAndExecute(this.menu.tile.getBlockPos(), ButtonResult.STACK_SIZE_AMOUNT, amount);
}); });
Supplier<Component> buttonText = () -> Component.translatable("info." + PrettyPipes.ID + ".limit_to_max_" + (StackSizeModuleItem.getLimitToMaxStackSize(this.menu.moduleStack) ? "on" : "off")); Supplier<Component> buttonText = () -> Component.translatable("info." + PrettyPipes.ID + ".limit_to_max_" + (StackSizeModuleItem.getLimitToMaxStackSize(this.menu.moduleStack) ? "on" : "off"));
this.addRenderableWidget(new Button(this.leftPos + 7, this.topPos + 17 + 32 + 10 + 22, 120, 20, buttonText.get(), b -> { this.addRenderableWidget(Button.builder(buttonText.get(), b -> {
PacketButton.sendAndExecute(this.menu.tile.getBlockPos(), ButtonResult.STACK_SIZE_MODULE_BUTTON); PacketButton.sendAndExecute(this.menu.tile.getBlockPos(), ButtonResult.STACK_SIZE_MODULE_BUTTON);
b.setMessage(buttonText.get()); b.setMessage(buttonText.get());
})); }).bounds(this.leftPos + 7, this.topPos + 17 + 32 + 10 + 22, 120, 20).build());
} }
@Override @Override
protected void renderLabels(PoseStack matrix, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) {
super.renderLabels(matrix, mouseX, mouseY); super.renderLabels(graphics, mouseX, mouseY);
this.font.draw(matrix, I18n.get("info." + PrettyPipes.ID + ".max_stack_size") + ":", 7, 17 + 32, 4210752); graphics.drawString(this.font, I18n.get("info." + PrettyPipes.ID + ".max_stack_size") + ":", 7, 17 + 32, 4210752);
} }
} }

View file

@ -20,7 +20,6 @@ import net.minecraft.world.level.block.entity.BlockEntityTicker;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ -31,7 +30,7 @@ import java.util.List;
public class PressurizerBlock extends BaseEntityBlock { public class PressurizerBlock extends BaseEntityBlock {
public PressurizerBlock() { public PressurizerBlock() {
super(BlockBehaviour.Properties.of(Material.STONE).strength(3).sound(SoundType.STONE)); super(BlockBehaviour.Properties.of().strength(3).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -16,7 +16,7 @@ public class PressurizerContainer extends AbstractContainerMenu {
public PressurizerContainer(@Nullable MenuType<?> type, int id, Player player, BlockPos pos) { public PressurizerContainer(@Nullable MenuType<?> type, int id, Player player, BlockPos pos) {
super(type, id); super(type, id);
this.tile = Utility.getBlockEntity(PressurizerBlockEntity.class, player.level, pos); this.tile = Utility.getBlockEntity(PressurizerBlockEntity.class, player.level(), pos);
for (var l = 0; l < 3; ++l) for (var l = 0; l < 3; ++l)
for (var j1 = 0; j1 < 9; ++j1) for (var j1 = 0; j1 < 9; ++j1)

View file

@ -1,10 +1,8 @@
package de.ellpeck.prettypipes.pressurizer; package de.ellpeck.prettypipes.pressurizer;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.PrettyPipes;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
@ -20,26 +18,24 @@ public class PressurizerGui extends AbstractContainerScreen<PressurizerContainer
} }
@Override @Override
public void render(PoseStack matrix, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(matrix); this.renderBackground(graphics);
super.render(matrix, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks);
this.renderTooltip(matrix, mouseX, mouseY); this.renderTooltip(graphics, mouseX, mouseY);
if (mouseX >= this.leftPos + 26 && mouseY >= this.topPos + 22 && mouseX < this.leftPos + 26 + 124 && mouseY < this.topPos + 22 + 12) if (mouseX >= this.leftPos + 26 && mouseY >= this.topPos + 22 && mouseX < this.leftPos + 26 + 124 && mouseY < this.topPos + 22 + 12)
this.renderTooltip(matrix, Component.translatable("info." + PrettyPipes.ID + ".energy", this.menu.tile.getEnergy(), this.menu.tile.getMaxEnergy()), mouseX, mouseY); graphics.renderTooltip(this.font, Component.translatable("info." + PrettyPipes.ID + ".energy", this.menu.tile.getEnergy(), this.menu.tile.getMaxEnergy()), mouseX, mouseY);
} }
@Override @Override
protected void renderLabels(PoseStack matrix, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) {
this.font.draw(matrix, this.playerInventoryTitle.getString(), 8, this.imageHeight - 96 + 2, 4210752); graphics.drawString(this.font, this.playerInventoryTitle.getString(), 8, this.imageHeight - 96 + 2, 4210752);
this.font.draw(matrix, this.title.getString(), 8, 6, 4210752); graphics.drawString(this.font, this.title.getString(), 8, 6, 4210752);
} }
@Override @Override
protected void renderBg(PoseStack matrixStack, float partialTicks, int x, int y) { protected void renderBg(GuiGraphics graphics, float partialTicks, int x, int y) {
RenderSystem.setShader(GameRenderer::getPositionTexShader); graphics.blit(PressurizerGui.TEXTURE, this.leftPos, this.topPos, 0, 0, 176, 137);
RenderSystem.setShaderTexture(0, PressurizerGui.TEXTURE);
this.blit(matrixStack, this.leftPos, this.topPos, 0, 0, 176, 137);
var energy = (int) (this.menu.tile.getEnergyPercentage() * 124); var energy = (int) (this.menu.tile.getEnergyPercentage() * 124);
this.blit(matrixStack, this.leftPos + 26, this.topPos + 22, 0, 137, energy, 12); graphics.blit(PressurizerGui.TEXTURE, this.leftPos + 26, this.topPos + 22, 0, 137, energy, 12);
} }
} }

View file

@ -61,7 +61,7 @@ public class CraftingTerminalBlockEntity extends ItemTerminalBlockEntity {
public void setGhostItems(List<PacketGhostSlot.Entry> stacks) { public void setGhostItems(List<PacketGhostSlot.Entry> stacks) {
this.updateItems(); this.updateItems();
for (var i = 0; i < this.ghostItems.getSlots(); i++) { for (var i = 0; i < this.ghostItems.getSlots(); i++) {
var items = stacks.get(i).getStacks(); var items = stacks.get(i).getStacks(this.level);
if (items.isEmpty()) { if (items.isEmpty()) {
this.ghostItems.setStackInSlot(i, ItemStack.EMPTY); this.ghostItems.setStackInSlot(i, ItemStack.EMPTY);
continue; continue;
@ -97,7 +97,7 @@ public class CraftingTerminalBlockEntity extends ItemTerminalBlockEntity {
if (!this.level.isClientSide) { if (!this.level.isClientSide) {
List<PacketGhostSlot.Entry> clients = new ArrayList<>(); List<PacketGhostSlot.Entry> clients = new ArrayList<>();
for (var i = 0; i < this.ghostItems.getSlots(); i++) for (var i = 0; i < this.ghostItems.getSlots(); i++)
clients.add(new PacketGhostSlot.Entry(Collections.singletonList(this.ghostItems.getStackInSlot(i)))); clients.add(new PacketGhostSlot.Entry(this.level, Collections.singletonList(this.ghostItems.getStackInSlot(i))));
PacketHandler.sendToAllLoaded(this.level, this.getBlockPos(), new PacketGhostSlot(this.getBlockPos(), clients)); PacketHandler.sendToAllLoaded(this.level, this.getBlockPos(), new PacketGhostSlot(this.getBlockPos(), clients));
} }
} }

View file

@ -20,7 +20,6 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityTicker;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ -31,7 +30,7 @@ import java.util.List;
public class ItemTerminalBlock extends BaseEntityBlock { public class ItemTerminalBlock extends BaseEntityBlock {
public ItemTerminalBlock() { public ItemTerminalBlock() {
super(Properties.of(Material.STONE).strength(3).sound(SoundType.STONE)); super(Properties.of().strength(3).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -46,11 +46,11 @@ public class CraftingTerminalContainer extends ItemTerminalContainer {
@Override @Override
public void slotsChanged(Container inventoryIn) { public void slotsChanged(Container inventoryIn) {
super.slotsChanged(inventoryIn); super.slotsChanged(inventoryIn);
if (!this.player.level.isClientSide) { if (!this.player.level().isClientSide) {
var ret = ItemStack.EMPTY; var ret = ItemStack.EMPTY;
var optional = this.player.level.getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, this.craftInventory, this.player.level); var optional = this.player.level().getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, this.craftInventory, this.player.level());
if (optional.isPresent()) if (optional.isPresent())
ret = optional.get().assemble(this.craftInventory); ret = optional.get().assemble(this.craftInventory, this.player.level().registryAccess());
this.craftResult.setItem(0, ret); this.craftResult.setItem(0, ret);
((ServerPlayer) this.player).connection.send(new ClientboundContainerSetSlotPacket(this.containerId, 0, 0, ret)); ((ServerPlayer) this.player).connection.send(new ClientboundContainerSetSlotPacket(this.containerId, 0, 0, ret));
} }

View file

@ -1,10 +1,10 @@
package de.ellpeck.prettypipes.terminal.containers; package de.ellpeck.prettypipes.terminal.containers;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.PrettyPipes;
import de.ellpeck.prettypipes.packets.PacketButton; import de.ellpeck.prettypipes.packets.PacketButton;
import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.packets.PacketHandler;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -24,12 +24,12 @@ public class CraftingTerminalGui extends ItemTerminalGui {
@Override @Override
protected void init() { protected void init() {
super.init(); super.init();
this.requestButton = this.addRenderableWidget(new Button(this.leftPos + 8, this.topPos + 100, 50, 20, Component.translatable("info." + PrettyPipes.ID + ".request"), button -> { this.requestButton = this.addRenderableWidget(Button.builder(Component.translatable("info." + PrettyPipes.ID + ".request"), button -> {
var amount = ItemTerminalGui.requestModifier(); var amount = ItemTerminalGui.requestModifier();
// also allow holding backspace instead of alt for people whose alt key is inaccessible (linux?) // also allow holding backspace instead of alt for people whose alt key is inaccessible (linux?)
var force = Screen.hasAltDown() || InputConstants.isKeyDown(this.minecraft.getWindow().getWindow(), 259) ? 1 : 0; var force = Screen.hasAltDown() || InputConstants.isKeyDown(this.minecraft.getWindow().getWindow(), 259) ? 1 : 0;
PacketHandler.sendToServer(new PacketButton(this.menu.tile.getBlockPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, amount, force)); PacketHandler.sendToServer(new PacketButton(this.menu.tile.getBlockPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, amount, force));
})); }).bounds(this.leftPos + 8, this.topPos + 100, 50, 20).build());
this.tick(); this.tick();
} }
@ -47,9 +47,10 @@ public class CraftingTerminalGui extends ItemTerminalGui {
} }
} }
@Override @Override
protected void renderLabels(PoseStack matrix, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) {
super.renderLabels(matrix, mouseX, mouseY); super.renderLabels(graphics, mouseX, mouseY);
var container = this.getCraftingContainer(); var container = this.getCraftingContainer();
var tile = container.getTile(); var tile = container.getTile();
@ -63,8 +64,8 @@ public class CraftingTerminalGui extends ItemTerminalGui {
var slot = container.slots.stream().filter(s -> s.container == container.craftInventory && s.getSlotIndex() == finalI).findFirst().orElse(null); var slot = container.slots.stream().filter(s -> s.container == container.craftInventory && s.getSlotIndex() == finalI).findFirst().orElse(null);
if (slot == null) if (slot == null)
continue; continue;
this.minecraft.getItemRenderer().renderGuiItem(ghost, slot.x, slot.y); graphics.renderItem(ghost, slot.x, slot.y);
this.minecraft.getItemRenderer().renderGuiItemDecorations(this.font, ghost, slot.x, slot.y, "0"); graphics.renderItemDecorations(this.font, ghost, slot.x, slot.y, "0");
} }
} }

View file

@ -19,7 +19,7 @@ public class ItemTerminalContainer extends AbstractContainerMenu {
public ItemTerminalContainer(@Nullable MenuType<?> type, int id, Player player, BlockPos pos) { public ItemTerminalContainer(@Nullable MenuType<?> type, int id, Player player, BlockPos pos) {
super(type, id); super(type, id);
this.tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level, pos); this.tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level(), pos);
this.addOwnSlots(player); this.addOwnSlots(player);

View file

@ -1,8 +1,6 @@
package de.ellpeck.prettypipes.terminal.containers; package de.ellpeck.prettypipes.terminal.containers;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import de.ellpeck.prettypipes.PrettyPipes; import de.ellpeck.prettypipes.PrettyPipes;
import de.ellpeck.prettypipes.misc.ItemTerminalWidget; import de.ellpeck.prettypipes.misc.ItemTerminalWidget;
import de.ellpeck.prettypipes.misc.PlayerPrefs; import de.ellpeck.prettypipes.misc.PlayerPrefs;
@ -10,14 +8,14 @@ import de.ellpeck.prettypipes.packets.PacketButton;
import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.packets.PacketHandler;
import de.ellpeck.prettypipes.packets.PacketRequest; import de.ellpeck.prettypipes.packets.PacketRequest;
import joptsimple.internal.Strings; import joptsimple.internal.Strings;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.components.Widget; import net.minecraft.client.gui.components.Renderable;
import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.resources.language.I18n; import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -70,7 +68,7 @@ public class ItemTerminalGui extends AbstractContainerScreen<ItemTerminalContain
if (this.items != null) if (this.items != null)
this.updateWidgets(); this.updateWidgets();
this.plusButton = this.addRenderableWidget(new Button(this.leftPos + this.getXOffset() + 95 - 7 + 12, this.topPos + 103, 12, 12, Component.literal("+"), button -> { this.plusButton = this.addRenderableWidget(Button.builder(Component.literal("+"), button -> {
var modifier = ItemTerminalGui.requestModifier(); var modifier = ItemTerminalGui.requestModifier();
if (modifier > 1 && this.requestAmount == 1) { if (modifier > 1 && this.requestAmount == 1) {
this.requestAmount = modifier; this.requestAmount = modifier;
@ -80,14 +78,14 @@ public class ItemTerminalGui extends AbstractContainerScreen<ItemTerminalContain
// 384 items is 6 stacks, which is what fits into the terminal slots // 384 items is 6 stacks, which is what fits into the terminal slots
if (this.requestAmount > 384) if (this.requestAmount > 384)
this.requestAmount = 384; this.requestAmount = 384;
})); }).bounds(this.leftPos + this.getXOffset() + 95 - 7 + 12, this.topPos + 103, 12, 12).build());
this.minusButton = this.addRenderableWidget(new Button(this.leftPos + this.getXOffset() + 95 - 7 - 24, this.topPos + 103, 12, 12, Component.literal("-"), button -> { this.minusButton = this.addRenderableWidget(Button.builder(Component.literal("-"), button -> {
this.requestAmount -= ItemTerminalGui.requestModifier(); this.requestAmount -= ItemTerminalGui.requestModifier();
if (this.requestAmount < 1) if (this.requestAmount < 1)
this.requestAmount = 1; this.requestAmount = 1;
})); }).bounds(this.leftPos + this.getXOffset() + 95 - 7 - 24, this.topPos + 103, 12, 12).build());
this.minusButton.active = false; this.minusButton.active = false;
this.requestButton = this.addRenderableWidget(new Button(this.leftPos + this.getXOffset() + 95 - 7 - 25, this.topPos + 115, 50, 20, Component.translatable("info." + PrettyPipes.ID + ".request"), button -> { this.requestButton = this.addRenderableWidget(Button.builder(Component.translatable("info." + PrettyPipes.ID + ".request"), button -> {
var widget = this.streamWidgets().filter(w -> w.selected).findFirst(); var widget = this.streamWidgets().filter(w -> w.selected).findFirst();
if (!widget.isPresent()) if (!widget.isPresent())
return; return;
@ -95,26 +93,25 @@ public class ItemTerminalGui extends AbstractContainerScreen<ItemTerminalContain
stack.setCount(1); stack.setCount(1);
PacketHandler.sendToServer(new PacketRequest(this.menu.tile.getBlockPos(), stack, this.requestAmount)); PacketHandler.sendToServer(new PacketRequest(this.menu.tile.getBlockPos(), stack, this.requestAmount));
this.requestAmount = 1; this.requestAmount = 1;
})); }).bounds(this.leftPos + this.getXOffset() + 95 - 7 - 25, this.topPos + 115, 50, 20).build());
this.requestButton.active = false; this.requestButton.active = false;
this.orderButton = this.addRenderableWidget(new Button(this.leftPos - 22, this.topPos, 20, 20, Component.literal(""), button -> { this.orderButton = this.addRenderableWidget(Button.builder(Component.literal(""), button -> {
if (this.sortedItems == null) if (this.sortedItems == null)
return; return;
var prefs = PlayerPrefs.get(); var prefs = PlayerPrefs.get();
prefs.terminalItemOrder = prefs.terminalItemOrder.next(); prefs.terminalItemOrder = prefs.terminalItemOrder.next();
prefs.save(); prefs.save();
this.updateWidgets(); this.updateWidgets();
})); }).bounds(this.leftPos - 22, this.topPos, 20, 20).build());
this.ascendingButton = this.addRenderableWidget(new Button(this.leftPos - 22, this.topPos + 22, 20, 20, Component.literal(""), button -> { this.ascendingButton = this.addRenderableWidget(Button.builder(Component.literal(""), button -> {
if (this.sortedItems == null) if (this.sortedItems == null)
return; return;
var prefs = PlayerPrefs.get(); var prefs = PlayerPrefs.get();
prefs.terminalAscending = !prefs.terminalAscending; prefs.terminalAscending = !prefs.terminalAscending;
prefs.save(); prefs.save();
this.updateWidgets(); this.updateWidgets();
})); }).bounds(this.leftPos - 22, this.topPos + 22, 20, 20).build());
this.cancelCraftingButton = this.addRenderableWidget(new Button(this.leftPos + this.imageWidth + 4, this.topPos + 4 + 64, 54, 20, Component.translatable("info." + PrettyPipes.ID + ".cancel_all"), b -> { this.cancelCraftingButton = this.addRenderableWidget(Button.builder(Component.translatable("info." + PrettyPipes.ID + ".cancel_all"), b -> {}).bounds(this.leftPos + this.imageWidth + 4, this.topPos + 4 + 64, 54, 20).build());
}));
this.cancelCraftingButton.visible = false; this.cancelCraftingButton.visible = false;
for (var y = 0; y < 4; y++) { for (var y = 0; y < 4; y++) {
for (var x = 0; x < 9; x++) for (var x = 0; x < 9; x++)
@ -148,9 +145,9 @@ public class ItemTerminalGui extends AbstractContainerScreen<ItemTerminalContain
if (button == 0 && mouseX >= this.leftPos + this.getXOffset() + 172 && this.topPos + mouseY >= 18 && mouseX < this.leftPos + this.getXOffset() + 172 + 12 && mouseY < this.topPos + 18 + 70) { if (button == 0 && mouseX >= this.leftPos + this.getXOffset() + 172 && this.topPos + mouseY >= 18 && mouseX < this.leftPos + this.getXOffset() + 172 + 12 && mouseY < this.topPos + 18 + 70) {
this.isScrolling = true; this.isScrolling = true;
return true; return true;
} else if (button == 1 && mouseX >= this.search.x && mouseX <= this.search.x + this.search.getWidth() && mouseY >= this.search.y && mouseY <= this.search.y + 8) { } else if (button == 1 && mouseX >= this.search.getX() && mouseX <= this.search.getX() + this.search.getWidth() && mouseY >= this.search.getY() && mouseY <= this.search.getY() + 8) {
this.search.setValue(""); this.search.setValue("");
this.search.setFocus(true); this.search.setFocused(true);
this.setFocused(this.search); this.setFocused(this.search);
return true; return true;
} }
@ -268,72 +265,70 @@ public class ItemTerminalGui extends AbstractContainerScreen<ItemTerminalContain
} }
} }
@Override @Override
public void render(PoseStack matrix, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(matrix); this.renderBackground(graphics);
super.render(matrix, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks);
for (var widget : this.renderables) { for (var widget : this.renderables) {
if (widget instanceof ItemTerminalWidget terminal) if (widget instanceof ItemTerminalWidget terminal)
terminal.renderToolTip(matrix, mouseX, mouseY); terminal.renderToolTip(graphics, mouseX, mouseY);
} }
if (this.sortedItems != null) { if (this.sortedItems != null) {
var prefs = PlayerPrefs.get(); var prefs = PlayerPrefs.get();
if (this.orderButton.isHoveredOrFocused()) if (this.orderButton.isHoveredOrFocused())
this.renderTooltip(matrix, Component.translatable("info." + PrettyPipes.ID + ".order", I18n.get("info." + PrettyPipes.ID + ".order." + prefs.terminalItemOrder.name().toLowerCase(Locale.ROOT))), mouseX, mouseY); graphics.renderTooltip(this.font, Component.translatable("info." + PrettyPipes.ID + ".order", I18n.get("info." + PrettyPipes.ID + ".order." + prefs.terminalItemOrder.name().toLowerCase(Locale.ROOT))), mouseX, mouseY);
if (this.ascendingButton.isHoveredOrFocused()) if (this.ascendingButton.isHoveredOrFocused())
this.renderTooltip(matrix, Component.translatable("info." + PrettyPipes.ID + "." + (prefs.terminalAscending ? "ascending" : "descending")), mouseX, mouseY); graphics.renderTooltip(this.font, Component.translatable("info." + PrettyPipes.ID + "." + (prefs.terminalAscending ? "ascending" : "descending")), mouseX, mouseY);
} }
if (this.cancelCraftingButton.visible && this.cancelCraftingButton.isHoveredOrFocused()) { if (this.cancelCraftingButton.visible && this.cancelCraftingButton.isHoveredOrFocused()) {
var tooltip = I18n.get("info." + PrettyPipes.ID + ".cancel_all.desc").split("\n"); var tooltip = I18n.get("info." + PrettyPipes.ID + ".cancel_all.desc").split("\n");
this.renderComponentTooltip(matrix, Arrays.stream(tooltip).map(Component::literal).collect(Collectors.toList()), mouseX, mouseY); graphics.renderTooltip(this.font, Arrays.stream(tooltip).map(Component::literal).collect(Collectors.toList()), Optional.empty(), mouseX, mouseY);
} }
if (!this.hoveredCrafting.isEmpty()) if (!this.hoveredCrafting.isEmpty())
this.renderTooltip(matrix, this.hoveredCrafting, mouseX, mouseY); graphics.renderTooltip(this.font, this.hoveredCrafting, mouseX, mouseY);
this.renderTooltip(matrix, mouseX, mouseY); this.renderTooltip(graphics, mouseX, mouseY);
} }
@Override @Override
protected void renderLabels(PoseStack matrix, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) {
this.font.draw(matrix, this.playerInventoryTitle.getString(), 8 + this.getXOffset(), this.imageHeight - 96 + 2, 4210752); graphics.drawString(this.font, this.playerInventoryTitle.getString(), 8 + this.getXOffset(), this.imageHeight - 96 + 2, 4210752);
this.font.draw(matrix, this.title.getString(), 8, 6, 4210752); graphics.drawString(this.font, this.title.getString(), 8, 6, 4210752);
var amount = String.valueOf(this.requestAmount); var amount = String.valueOf(this.requestAmount);
this.font.draw(matrix, amount, (176 + 15 - this.font.width(amount)) / 2F - 7 + this.getXOffset(), 106, 4210752); graphics.drawString(this.font, amount, (176 + 15 - this.font.width(amount)) / 2 - 7 + this.getXOffset(), 106, 4210752);
if (this.currentlyCrafting != null && !this.currentlyCrafting.isEmpty()) { if (this.currentlyCrafting != null && !this.currentlyCrafting.isEmpty()) {
this.font.draw(matrix, I18n.get("info." + PrettyPipes.ID + ".crafting"), this.imageWidth + 4, 4 + 6, 4210752); graphics.drawString(this.font, I18n.get("info." + PrettyPipes.ID + ".crafting"), this.imageWidth + 4, 4 + 6, 4210752);
if (this.currentlyCrafting.size() > 6) if (this.currentlyCrafting.size() > 6)
this.font.draw(matrix, ". . .", this.imageWidth + 24, 4 + 51, 4210752); graphics.drawString(this.font, ". . .", this.imageWidth + 24, 4 + 51, 4210752);
} }
} }
@Override @Override
protected void renderBg(PoseStack matrix, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) {
RenderSystem.setShader(GameRenderer::getPositionTexShader); graphics.blit(this.getTexture(), this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight);
RenderSystem.setShaderTexture(0, this.getTexture());
this.blit(matrix, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight);
if (this.sortedItems != null && this.sortedItems.size() >= 9 * 4) { if (this.sortedItems != null && this.sortedItems.size() >= 9 * 4) {
var percentage = this.scrollOffset / (float) (this.sortedItems.size() / 9 - 3); var percentage = this.scrollOffset / (float) (this.sortedItems.size() / 9 - 3);
this.blit(matrix, this.leftPos + this.getXOffset() + 172, this.topPos + 18 + (int) (percentage * (70 - 15)), 232, 241, 12, 15); graphics.blit(this.getTexture(), this.leftPos + this.getXOffset() + 172, this.topPos + 18 + (int) (percentage * (70 - 15)), 232, 241, 12, 15);
} else { } else {
this.blit(matrix, this.leftPos + this.getXOffset() + 172, this.topPos + 18, 244, 241, 12, 15); graphics.blit(this.getTexture(), this.leftPos + this.getXOffset() + 172, this.topPos + 18, 244, 241, 12, 15);
} }
// draw the items that are currently crafting // draw the items that are currently crafting
this.hoveredCrafting = ItemStack.EMPTY; this.hoveredCrafting = ItemStack.EMPTY;
if (this.currentlyCrafting != null && !this.currentlyCrafting.isEmpty()) { if (this.currentlyCrafting != null && !this.currentlyCrafting.isEmpty()) {
RenderSystem.setShader(GameRenderer::getPositionTexShader); graphics.blit(ItemTerminalGui.TEXTURE, this.leftPos + this.imageWidth, this.topPos + 4, 191, 0, 65, 89);
RenderSystem.setShaderTexture(0, ItemTerminalGui.TEXTURE);
this.blit(matrix, this.leftPos + this.imageWidth, this.topPos + 4, 191, 0, 65, 89);
var x = 0; var x = 0;
var y = 0; var y = 0;
for (var stack : this.currentlyCrafting) { for (var stack : this.currentlyCrafting) {
var itemX = this.leftPos + this.imageWidth + 4 + x * 18; var itemX = this.leftPos + this.imageWidth + 4 + x * 18;
var itemY = this.topPos + 4 + 16 + y * 18; var itemY = this.topPos + 4 + 16 + y * 18;
this.itemRenderer.renderGuiItem(stack, itemX, itemY); graphics.renderItem(stack, itemX, itemY);
this.itemRenderer.renderGuiItemDecorations(this.font, stack, itemX, itemY, String.valueOf(stack.getCount())); graphics.renderItemDecorations(this.font, stack, itemX, itemY, String.valueOf(stack.getCount()));
if (mouseX >= itemX && mouseY >= itemY && mouseX < itemX + 16 && mouseY < itemY + 18) if (mouseX >= itemX && mouseY >= itemY && mouseX < itemX + 16 && mouseY < itemY + 18)
this.hoveredCrafting = stack; this.hoveredCrafting = stack;
x++; x++;
@ -364,7 +359,7 @@ public class ItemTerminalGui extends AbstractContainerScreen<ItemTerminalContain
} }
@Override @Override
public <T extends GuiEventListener & Widget & NarratableEntry> T addRenderableWidget(T p_169406_) { public <T extends GuiEventListener & Renderable & NarratableEntry> T addRenderableWidget(T p_169406_) {
// overriding to public for JEIPrettyPipesPlugin // overriding to public for JEIPrettyPipesPlugin
return super.addRenderableWidget(p_169406_); return super.addRenderableWidget(p_169406_);
} }

View file

@ -1,11 +1,11 @@
package de.ellpeck.prettypipes.terminal.containers; package de.ellpeck.prettypipes.terminal.containers;
import net.minecraft.world.entity.player.StackedContents; import net.minecraft.world.entity.player.StackedContents;
import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.TransientCraftingContainer;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
public class WrappedCraftingInventory extends CraftingContainer { public class WrappedCraftingInventory extends TransientCraftingContainer {
private final ItemStackHandler items; private final ItemStackHandler items;
private final CraftingTerminalContainer eventHandler; private final CraftingTerminalContainer eventHandler;