diff --git a/build.gradle b/build.gradle index 163c3ce42..d77a896ea 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ apply plugin: 'net.minecraftforge.gradle' apply plugin: 'eclipse' apply plugin: 'maven-publish' -version = '0.0.1' +version = '0.0.2' group = 'com.simibubi.create' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'create' diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 839528156..cb6d55530 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -1,13 +1,13 @@ package com.simibubi.create; import com.simibubi.create.block.CreativeCrateBlock; -import com.simibubi.create.block.IJustForRendering; import com.simibubi.create.block.RenderingBlock; import com.simibubi.create.block.SchematicTableBlock; import com.simibubi.create.block.SchematicannonBlock; -import com.simibubi.create.block.symmetry.BlockSymmetryCrossPlane; -import com.simibubi.create.block.symmetry.BlockSymmetryPlane; -import com.simibubi.create.block.symmetry.BlockSymmetryTriplePlane; +import com.simibubi.create.block.symmetry.CrossPlaneSymmetryBlock; +import com.simibubi.create.block.symmetry.PlaneSymmetryBlock; +import com.simibubi.create.block.symmetry.TriplePlaneSymmetryBlock; +import com.simibubi.create.utility.IJustForRendering; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -24,9 +24,9 @@ public enum AllBlocks { SCHEMATIC_TABLE(new SchematicTableBlock()), - SYMMETRY_PLANE(new BlockSymmetryPlane()), - SYMMETRY_CROSSPLANE(new BlockSymmetryCrossPlane()), - SYMMETRY_TRIPLEPLANE(new BlockSymmetryTriplePlane()); + SYMMETRY_PLANE(new PlaneSymmetryBlock()), + SYMMETRY_CROSSPLANE(new CrossPlaneSymmetryBlock()), + SYMMETRY_TRIPLEPLANE(new TriplePlaneSymmetryBlock()); public Block block; diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 28c3175cd..64c0b9a27 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -1,9 +1,9 @@ package com.simibubi.create; -import com.simibubi.create.item.ItemBlueprint; -import com.simibubi.create.item.ItemBlueprintAndQuill; -import com.simibubi.create.item.ItemTreeFertilizer; -import com.simibubi.create.item.ItemWandSymmetry; +import com.simibubi.create.item.BlueprintItem; +import com.simibubi.create.item.BlueprintAndQuillItem; +import com.simibubi.create.item.TreeFertilizerItem; +import com.simibubi.create.item.SymmetryWandItem; import net.minecraft.item.Item; import net.minecraft.item.Item.Properties; @@ -14,11 +14,11 @@ import net.minecraftforge.registries.IForgeRegistry; public enum AllItems { - TREE_FERTILIZER(new ItemTreeFertilizer(standardProperties())), - SYMMETRY_WAND(new ItemWandSymmetry(standardProperties())), + TREE_FERTILIZER(new TreeFertilizerItem(standardProperties())), + SYMMETRY_WAND(new SymmetryWandItem(standardProperties())), EMPTY_BLUEPRINT(new Item(standardProperties().maxStackSize(1))), - BLUEPRINT_AND_QUILL(new ItemBlueprintAndQuill(standardProperties().maxStackSize(1))), - BLUEPRINT(new ItemBlueprint(standardProperties())); + BLUEPRINT_AND_QUILL(new BlueprintAndQuillItem(standardProperties().maxStackSize(1))), + BLUEPRINT(new BlueprintItem(standardProperties())); public Item item; diff --git a/src/main/java/com/simibubi/create/ClientSchematicLoader.java b/src/main/java/com/simibubi/create/ClientSchematicLoader.java index d510fda76..33200d148 100644 --- a/src/main/java/com/simibubi/create/ClientSchematicLoader.java +++ b/src/main/java/com/simibubi/create/ClientSchematicLoader.java @@ -16,8 +16,8 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import com.simibubi.create.networking.PacketSchematicUpload; -import com.simibubi.create.networking.Packets; +import com.simibubi.create.networking.SchematicUploadPacket; +import com.simibubi.create.networking.AllPackets; import com.simibubi.create.utility.FilesHelper; import net.minecraft.client.Minecraft; @@ -76,7 +76,7 @@ public class ClientSchematicLoader { in = Files.newInputStream(path, StandardOpenOption.READ); activeUploads.put(schematic, in); - Packets.channel.sendToServer(PacketSchematicUpload.begin(schematic, size)); + AllPackets.channel.sendToServer(SchematicUploadPacket.begin(schematic, size)); } catch (IOException e) { e.printStackTrace(); } @@ -92,7 +92,7 @@ public class ClientSchematicLoader { } if (Minecraft.getInstance().world != null) - Packets.channel.sendToServer(PacketSchematicUpload.write(schematic, data)); + AllPackets.channel.sendToServer(SchematicUploadPacket.write(schematic, data)); else { activeUploads.remove(schematic); return; @@ -108,7 +108,7 @@ public class ClientSchematicLoader { private void finishUpload(String schematic) { if (activeUploads.containsKey(schematic)) { - Packets.channel.sendToServer(PacketSchematicUpload.finish(schematic)); + AllPackets.channel.sendToServer(SchematicUploadPacket.finish(schematic)); activeUploads.remove(schematic); } } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index fd3e6d797..3c8fc9e56 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -3,10 +3,10 @@ package com.simibubi.create; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import com.simibubi.create.gui.Keyboard; -import com.simibubi.create.networking.Packets; +import com.simibubi.create.networking.AllPackets; import com.simibubi.create.schematic.BlueprintHandler; import com.simibubi.create.schematic.SchematicHologram; +import com.simibubi.create.utility.Keyboard; import net.minecraft.block.Block; import net.minecraft.client.settings.KeyBinding; @@ -35,7 +35,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.0.1"; + public static final String VERSION = "0.0.2"; public static Logger logger = LogManager.getLogger(); @@ -68,7 +68,7 @@ public class Create { } private void init(final FMLCommonSetupEvent event) { - Packets.registerPackets(); + AllPackets.registerPackets(); DistExecutor.runWhenOn(Dist.CLIENT, () -> AllContainers::registerScreenFactories); sSchematicLoader = new ServerSchematicLoader(); } diff --git a/src/main/java/com/simibubi/create/ServerSchematicLoader.java b/src/main/java/com/simibubi/create/ServerSchematicLoader.java index 02d1ab3fc..36e339eb8 100644 --- a/src/main/java/com/simibubi/create/ServerSchematicLoader.java +++ b/src/main/java/com/simibubi/create/ServerSchematicLoader.java @@ -15,8 +15,8 @@ import java.util.Set; import java.util.stream.Stream; import com.simibubi.create.block.SchematicTableTileEntity; -import com.simibubi.create.item.ItemBlueprint; -import com.simibubi.create.networking.PacketSchematicUpload.DimensionPos; +import com.simibubi.create.item.BlueprintItem; +import com.simibubi.create.networking.SchematicUploadPacket.DimensionPos; import com.simibubi.create.utility.FilesHelper; import net.minecraft.block.BlockState; @@ -224,7 +224,7 @@ public class ServerSchematicLoader { tileEntity.finishUpload(); tileEntity.inventory.setStackInSlot(0, ItemStack.EMPTY); tileEntity.inventory.setStackInSlot(1, - ItemBlueprint.create(schematic, player.getName().getFormattedText())); + BlueprintItem.create(schematic, player.getName().getFormattedText())); } catch (IOException e) { Create.logger.error("Exception Thrown when finishing Upload: " + playerSchematicId); diff --git a/src/main/java/com/simibubi/create/block/CreativeCrateBlock.java b/src/main/java/com/simibubi/create/block/CreativeCrateBlock.java index 50a1542ab..9cd54428d 100644 --- a/src/main/java/com/simibubi/create/block/CreativeCrateBlock.java +++ b/src/main/java/com/simibubi/create/block/CreativeCrateBlock.java @@ -1,12 +1,23 @@ package com.simibubi.create.block; +import java.util.List; + +import com.simibubi.create.utility.Keyboard; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.material.Material; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockReader; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class CreativeCrateBlock extends Block { @@ -21,6 +32,19 @@ public class CreativeCrateBlock extends Block { return false; } + @Override + @OnlyIn(value = Dist.CLIENT) + public void addInformation(ItemStack stack, IBlockReader worldIn, List tooltip, + ITooltipFlag flagIn) { + if (Keyboard.isKeyDown(Keyboard.LSHIFT)) { + tooltip.add(new StringTextComponent(TextFormatting.LIGHT_PURPLE + "Creative Item")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "Grants an attached " + TextFormatting.BLUE + "Schematicannon")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "unlimited access to blocks.")); + } else + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "< Hold Shift >")); + super.addInformation(stack, worldIn, tooltip, flagIn); + } + @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return shape; diff --git a/src/main/java/com/simibubi/create/block/RenderingBlock.java b/src/main/java/com/simibubi/create/block/RenderingBlock.java index 0418fb616..dd85b3a1e 100644 --- a/src/main/java/com/simibubi/create/block/RenderingBlock.java +++ b/src/main/java/com/simibubi/create/block/RenderingBlock.java @@ -1,5 +1,7 @@ package com.simibubi.create.block; +import com.simibubi.create.utility.IJustForRendering; + import net.minecraft.block.Block; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/simibubi/create/block/SchematicTableBlock.java b/src/main/java/com/simibubi/create/block/SchematicTableBlock.java index 298d0cb1e..0e4f9d52e 100644 --- a/src/main/java/com/simibubi/create/block/SchematicTableBlock.java +++ b/src/main/java/com/simibubi/create/block/SchematicTableBlock.java @@ -1,20 +1,31 @@ package com.simibubi.create.block; +import java.util.List; + +import com.simibubi.create.utility.Keyboard; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.HorizontalBlock; +import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; import net.minecraft.state.StateContainer.Builder; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.network.NetworkHooks; public class SchematicTableBlock extends HorizontalBlock { @@ -33,6 +44,18 @@ public class SchematicTableBlock extends HorizontalBlock { public boolean isSolid(BlockState state) { return false; } + + @Override + @OnlyIn(value = Dist.CLIENT) + public void addInformation(ItemStack stack, IBlockReader worldIn, List tooltip, + ITooltipFlag flagIn) { + if (Keyboard.isKeyDown(Keyboard.LSHIFT)) { + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "Writes saved Schematics onto")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "an " + TextFormatting.BLUE + "Empty Schematic")); + } else + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "< Hold Shift >")); + super.addInformation(stack, worldIn, tooltip, flagIn); + } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { diff --git a/src/main/java/com/simibubi/create/block/SchematicannonBlock.java b/src/main/java/com/simibubi/create/block/SchematicannonBlock.java index 9dc7c67bf..3fd951382 100644 --- a/src/main/java/com/simibubi/create/block/SchematicannonBlock.java +++ b/src/main/java/com/simibubi/create/block/SchematicannonBlock.java @@ -1,10 +1,14 @@ package com.simibubi.create.block; +import java.util.List; + import com.simibubi.create.AllItems; +import com.simibubi.create.utility.Keyboard; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.InventoryHelper; @@ -14,10 +18,15 @@ import net.minecraft.util.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.network.NetworkHooks; public class SchematicannonBlock extends Block { @@ -36,6 +45,19 @@ public class SchematicannonBlock extends Block { return new SchematicannonTileEntity(); } + @Override + @OnlyIn(value = Dist.CLIENT) + public void addInformation(ItemStack stack, IBlockReader worldIn, List tooltip, + ITooltipFlag flagIn) { + if (Keyboard.isKeyDown(Keyboard.LSHIFT)) { + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "Prints a deployed " + TextFormatting.BLUE + "Schematic")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "into the world using blocks from inventories")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "placed right next to it.")); + } else + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "< Hold Shift >")); + super.addInformation(stack, worldIn, tooltip, flagIn); + } + @Override public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { diff --git a/src/main/java/com/simibubi/create/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/block/SchematicannonTileEntity.java index 876a4ff31..8f259d1a6 100644 --- a/src/main/java/com/simibubi/create/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/block/SchematicannonTileEntity.java @@ -7,7 +7,7 @@ import java.util.List; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllTileEntities; -import com.simibubi.create.item.ItemBlueprint; +import com.simibubi.create.item.BlueprintItem; import com.simibubi.create.schematic.Cuboid; import com.simibubi.create.schematic.MaterialChecklist; import com.simibubi.create.schematic.SchematicWorld; @@ -495,7 +495,7 @@ public class SchematicannonTileEntity extends TileEntitySynced implements ITicka } // Load blocks into reader - Template activeTemplate = ItemBlueprint.getSchematic(blueprint); + Template activeTemplate = BlueprintItem.getSchematic(blueprint); BlockPos anchor = NBTUtil.readBlockPos(blueprint.getTag().getCompound("Anchor")); if (activeTemplate.getSize().equals(BlockPos.ZERO)) { @@ -514,7 +514,7 @@ public class SchematicannonTileEntity extends TileEntitySynced implements ITicka schematicAnchor = anchor; blockReader = new SchematicWorld(new HashMap<>(), new Cuboid(), schematicAnchor); - activeTemplate.addBlocksToWorld(blockReader, schematicAnchor, ItemBlueprint.getSettings(blueprint)); + activeTemplate.addBlocksToWorld(blockReader, schematicAnchor, BlueprintItem.getSettings(blueprint)); schematicLoaded = true; state = State.PAUSED; statusMsg = "Ready"; diff --git a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetry.java b/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetry.java deleted file mode 100644 index 880782ad6..000000000 --- a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetry.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.simibubi.create.block.symmetry; - -import com.simibubi.create.block.IJustForRendering; - -import net.minecraft.block.Block; - -public class BlockSymmetry extends Block implements IJustForRendering { - - public BlockSymmetry(Properties properties) { - super(properties); - } - -} diff --git a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryCrossPlane.java b/src/main/java/com/simibubi/create/block/symmetry/CrossPlaneSymmetryBlock.java similarity index 88% rename from src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryCrossPlane.java rename to src/main/java/com/simibubi/create/block/symmetry/CrossPlaneSymmetryBlock.java index 31e471585..c4ce9f8d7 100644 --- a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryCrossPlane.java +++ b/src/main/java/com/simibubi/create/block/symmetry/CrossPlaneSymmetryBlock.java @@ -8,12 +8,12 @@ import net.minecraft.block.material.Material; import net.minecraft.state.EnumProperty; import net.minecraft.state.StateContainer.Builder; -public class BlockSymmetryCrossPlane extends BlockSymmetry { +public class CrossPlaneSymmetryBlock extends SymmetryBlock { public static final EnumProperty align = EnumProperty.create("align", SymmetryCrossPlane.Align.class); - public BlockSymmetryCrossPlane() { + public CrossPlaneSymmetryBlock() { super(Properties.create(Material.AIR)); this.setDefaultState(getDefaultState().with(align, SymmetryCrossPlane.Align.Y)); } diff --git a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryPlane.java b/src/main/java/com/simibubi/create/block/symmetry/PlaneSymmetryBlock.java similarity index 89% rename from src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryPlane.java rename to src/main/java/com/simibubi/create/block/symmetry/PlaneSymmetryBlock.java index 3c0fe2f42..96b246fee 100644 --- a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryPlane.java +++ b/src/main/java/com/simibubi/create/block/symmetry/PlaneSymmetryBlock.java @@ -8,11 +8,11 @@ import net.minecraft.block.material.Material; import net.minecraft.state.EnumProperty; import net.minecraft.state.StateContainer.Builder; -public class BlockSymmetryPlane extends BlockSymmetry { +public class PlaneSymmetryBlock extends SymmetryBlock { public static final EnumProperty align = EnumProperty.create("align", SymmetryPlane.Align.class); - public BlockSymmetryPlane() { + public PlaneSymmetryBlock() { super(Properties.create(Material.AIR)); this.setDefaultState(getDefaultState().with(align, SymmetryPlane.Align.XY)); } diff --git a/src/main/java/com/simibubi/create/block/symmetry/SymmetryBlock.java b/src/main/java/com/simibubi/create/block/symmetry/SymmetryBlock.java new file mode 100644 index 000000000..0bd6d0416 --- /dev/null +++ b/src/main/java/com/simibubi/create/block/symmetry/SymmetryBlock.java @@ -0,0 +1,13 @@ +package com.simibubi.create.block.symmetry; + +import com.simibubi.create.utility.IJustForRendering; + +import net.minecraft.block.Block; + +public class SymmetryBlock extends Block implements IJustForRendering { + + public SymmetryBlock(Properties properties) { + super(properties); + } + +} diff --git a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryTriplePlane.java b/src/main/java/com/simibubi/create/block/symmetry/TriplePlaneSymmetryBlock.java similarity index 59% rename from src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryTriplePlane.java rename to src/main/java/com/simibubi/create/block/symmetry/TriplePlaneSymmetryBlock.java index e63f32f7e..ed435b1e4 100644 --- a/src/main/java/com/simibubi/create/block/symmetry/BlockSymmetryTriplePlane.java +++ b/src/main/java/com/simibubi/create/block/symmetry/TriplePlaneSymmetryBlock.java @@ -2,9 +2,9 @@ package com.simibubi.create.block.symmetry; import net.minecraft.block.material.Material; -public class BlockSymmetryTriplePlane extends BlockSymmetry { +public class TriplePlaneSymmetryBlock extends SymmetryBlock { - public BlockSymmetryTriplePlane() { + public TriplePlaneSymmetryBlock() { super(Properties.create(Material.AIR)); } diff --git a/src/main/java/com/simibubi/create/gui/BlueprintEditScreen.java b/src/main/java/com/simibubi/create/gui/BlueprintEditScreen.java index f735e28c3..8fc4221ca 100644 --- a/src/main/java/com/simibubi/create/gui/BlueprintEditScreen.java +++ b/src/main/java/com/simibubi/create/gui/BlueprintEditScreen.java @@ -6,9 +6,9 @@ import java.util.List; import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllItems; -import com.simibubi.create.gui.widgets.DynamicLabel; -import com.simibubi.create.gui.widgets.OptionScrollArea; -import com.simibubi.create.gui.widgets.ScrollArea; +import com.simibubi.create.gui.widgets.Label; +import com.simibubi.create.gui.widgets.SelectionScrollInput; +import com.simibubi.create.gui.widgets.ScrollInput; import com.simibubi.create.schematic.BlueprintHandler; import net.minecraft.client.gui.widget.TextFieldWidget; @@ -27,12 +27,12 @@ public class BlueprintEditScreen extends AbstractSimiScreen { "Clockwise 270"); private static final List mirrorOptions = ImmutableList.of("None", "Left-Right", "Front-Back"); - private ScrollArea rotationArea; - private ScrollArea mirrorArea; + private ScrollInput rotationArea; + private ScrollInput mirrorArea; @Override protected void init() { - setWindowSize(GuiResources.SCHEMATIC.width + 50, GuiResources.SCHEMATIC.height); + setWindowSize(ScreenResources.SCHEMATIC.width + 50, ScreenResources.SCHEMATIC.height); int x = topLeftX; int y = topLeftY; BlueprintHandler bh = BlueprintHandler.instance; @@ -70,12 +70,12 @@ public class BlueprintEditScreen extends AbstractSimiScreen { }); } - DynamicLabel labelR = new DynamicLabel(x + 99, y + 52, "").withShadow(); - rotationArea = new OptionScrollArea(x + 96, y + 49, 94, 14).forOptions(rotationOptions).titled("Rotation") + Label labelR = new Label(x + 99, y + 52, "").withShadow(); + rotationArea = new SelectionScrollInput(x + 96, y + 49, 94, 14).forOptions(rotationOptions).titled("Rotation") .setState(bh.cachedSettings.getRotation().ordinal()).writingTo(labelR); - DynamicLabel labelM = new DynamicLabel(x + 99, y + 72, "").withShadow(); - mirrorArea = new OptionScrollArea(x + 96, y + 69, 94, 14).forOptions(mirrorOptions).titled("Mirror") + Label labelM = new Label(x + 99, y + 72, "").withShadow(); + mirrorArea = new SelectionScrollInput(x + 96, y + 69, 94, 14).forOptions(mirrorOptions).titled("Mirror") .setState(bh.cachedSettings.getMirror().ordinal()).writingTo(labelM); Collections.addAll(widgets, xInput, yInput, zInput); @@ -118,15 +118,15 @@ public class BlueprintEditScreen extends AbstractSimiScreen { protected void renderWindow(int mouseX, int mouseY, float partialTicks) { int x = topLeftX; int y = topLeftY; - GuiResources.SCHEMATIC.draw(this, x, y); + ScreenResources.SCHEMATIC.draw(this, x, y); BlueprintHandler bh = BlueprintHandler.instance; font.drawStringWithShadow(bh.cachedSchematicName, x + 103 - font.getStringWidth(bh.cachedSchematicName) / 2, y + 10, 0xDDEEFF); - font.drawString("Position", x + 10, y + 32, GuiResources.FONT_COLOR); - font.drawString("Rotation", x + 10, y + 52, GuiResources.FONT_COLOR); - font.drawString("Mirror", x + 10, y + 72, GuiResources.FONT_COLOR); + font.drawString("Position", x + 10, y + 32, ScreenResources.FONT_COLOR); + font.drawString("Rotation", x + 10, y + 52, ScreenResources.FONT_COLOR); + font.drawString("Mirror", x + 10, y + 72, ScreenResources.FONT_COLOR); GlStateManager.pushMatrix(); GlStateManager.translated(topLeftX + 220, topLeftY + 20, 0); diff --git a/src/main/java/com/simibubi/create/gui/BlueprintHotbarOverlay.java b/src/main/java/com/simibubi/create/gui/BlueprintHotbarOverlay.java index 5a876abdc..bd22ea1a0 100644 --- a/src/main/java/com/simibubi/create/gui/BlueprintHotbarOverlay.java +++ b/src/main/java/com/simibubi/create/gui/BlueprintHotbarOverlay.java @@ -13,7 +13,7 @@ public class BlueprintHotbarOverlay extends AbstractGui { int x = mainWindow.getScaledWidth() / 2 - 92; int y = mainWindow.getScaledHeight() - 23; GlStateManager.enableAlphaTest(); - GuiResources.BLUEPRINT_SLOT.draw(this, x + 20 * slot, y); + ScreenResources.BLUEPRINT_SLOT.draw(this, x + 20 * slot, y); GlStateManager.disableAlphaTest(); } diff --git a/src/main/java/com/simibubi/create/gui/SchematicTableScreen.java b/src/main/java/com/simibubi/create/gui/SchematicTableScreen.java index 63d91a901..70798ac84 100644 --- a/src/main/java/com/simibubi/create/gui/SchematicTableScreen.java +++ b/src/main/java/com/simibubi/create/gui/SchematicTableScreen.java @@ -7,10 +7,10 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.Create; import com.simibubi.create.block.SchematicTableContainer; -import com.simibubi.create.gui.widgets.DynamicLabel; -import com.simibubi.create.gui.widgets.OptionScrollArea; -import com.simibubi.create.gui.widgets.ScrollArea; -import com.simibubi.create.gui.widgets.SimiButton; +import com.simibubi.create.gui.widgets.Label; +import com.simibubi.create.gui.widgets.SelectionScrollInput; +import com.simibubi.create.gui.widgets.ScrollInput; +import com.simibubi.create.gui.widgets.IconButton; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.IHasContainer; @@ -24,11 +24,11 @@ import net.minecraft.util.text.ITextComponent; public class SchematicTableScreen extends AbstractSimiContainerScreen implements IHasContainer { - private ScrollArea schematicsArea; - private SimiButton confirmButton; - private SimiButton folderButton; - private SimiButton refreshButton; - private DynamicLabel schematicsLabel; + private ScrollInput schematicsArea; + private IconButton confirmButton; + private IconButton folderButton; + private IconButton refreshButton; + private Label schematicsLabel; private float progress; private float chasingProgress; @@ -41,7 +41,7 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen availableSchematics = Create.cSchematicLoader.getAvailableSchematics(); if (!availableSchematics.isEmpty()) { - schematicsLabel = new DynamicLabel(mainLeft + 36, mainTop + 26, "").withShadow(); - schematicsArea = new OptionScrollArea(mainLeft + 33, mainTop + 23, 134, 14).forOptions(availableSchematics) + schematicsLabel = new Label(mainLeft + 36, mainTop + 26, "").withShadow(); + schematicsArea = new SelectionScrollInput(mainLeft + 33, mainTop + 23, 134, 14).forOptions(availableSchematics) .titled("Available Schematics").writingTo(schematicsLabel); widgets.add(schematicsArea); widgets.add(schematicsLabel); } - confirmButton = new SimiButton(mainLeft + 69, mainTop + 55, GuiResources.ICON_CONFIRM); - folderButton = new SimiButton(mainLeft + 204, mainTop + 6, GuiResources.ICON_OPEN_FOLDER); - refreshButton = new SimiButton(mainLeft + 204, mainTop + 26, GuiResources.ICON_REFRESH); + confirmButton = new IconButton(mainLeft + 69, mainTop + 55, ScreenResources.ICON_CONFIRM); + folderButton = new IconButton(mainLeft + 204, mainTop + 6, ScreenResources.ICON_OPEN_FOLDER); + refreshButton = new IconButton(mainLeft + 204, mainTop + 26, ScreenResources.ICON_REFRESH); widgets.add(confirmButton); widgets.add(folderButton); widgets.add(refreshButton); @@ -83,28 +83,28 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen availableSchematics = Create.cSchematicLoader.getAvailableSchematics(); widgets.remove(schematicsArea); - schematicsArea = new OptionScrollArea(guiLeft - 56 + 33, guiTop - 16 + 23, 134, 14).forOptions(availableSchematics) + schematicsArea = new SelectionScrollInput(guiLeft - 56 + 33, guiTop - 16 + 23, 134, 14).forOptions(availableSchematics) .titled("Available Schematics").writingTo(schematicsLabel); widgets.add(schematicsArea); } diff --git a/src/main/java/com/simibubi/create/gui/SchematicannonScreen.java b/src/main/java/com/simibubi/create/gui/SchematicannonScreen.java index fa8f99263..4a0227660 100644 --- a/src/main/java/com/simibubi/create/gui/SchematicannonScreen.java +++ b/src/main/java/com/simibubi/create/gui/SchematicannonScreen.java @@ -9,12 +9,12 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.block.SchematicannonContainer; import com.simibubi.create.block.SchematicannonTileEntity; -import com.simibubi.create.gui.widgets.GuiIndicator; -import com.simibubi.create.gui.widgets.GuiIndicator.State; -import com.simibubi.create.gui.widgets.SimiButton; -import com.simibubi.create.networking.PacketConfigureSchematicannon; -import com.simibubi.create.networking.PacketConfigureSchematicannon.Option; -import com.simibubi.create.networking.Packets; +import com.simibubi.create.gui.widgets.Indicator; +import com.simibubi.create.gui.widgets.Indicator.State; +import com.simibubi.create.gui.widgets.IconButton; +import com.simibubi.create.networking.ConfigureSchematicannonPacket; +import com.simibubi.create.networking.ConfigureSchematicannonPacket.Option; +import com.simibubi.create.networking.AllPackets; import net.minecraft.client.gui.widget.Widget; import net.minecraft.client.renderer.RenderHelper; @@ -25,20 +25,20 @@ import net.minecraft.util.text.TextFormatting; public class SchematicannonScreen extends AbstractSimiContainerScreen { - protected Vector replaceLevelIndicators; - protected Vector replaceLevelButtons; + protected Vector replaceLevelIndicators; + protected Vector replaceLevelButtons; - protected SimiButton skipMissingButton; - protected GuiIndicator skipMissingIndicator; - protected SimiButton skipTilesButton; - protected GuiIndicator skipTilesIndicator; + protected IconButton skipMissingButton; + protected Indicator skipMissingIndicator; + protected IconButton skipTilesButton; + protected Indicator skipTilesIndicator; - protected SimiButton playButton; - protected GuiIndicator playIndicator; - protected SimiButton pauseButton; - protected GuiIndicator pauseIndicator; - protected SimiButton resetButton; - protected GuiIndicator resetIndicator; + protected IconButton playButton; + protected Indicator playIndicator; + protected IconButton pauseButton; + protected Indicator pauseIndicator; + protected IconButton resetButton; + protected Indicator resetIndicator; public SchematicannonScreen(SchematicannonContainer container, PlayerInventory inventory, ITextComponent p_i51105_3_) { @@ -47,7 +47,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen(4); replaceLevelIndicators = new Vector<>(4); - List icons = ImmutableList.of(GuiResources.ICON_DONT_REPLACE, GuiResources.ICON_REPLACE_SOLID, - GuiResources.ICON_REPLACE_ANY, GuiResources.ICON_REPLACE_EMPTY); + List icons = ImmutableList.of(ScreenResources.ICON_DONT_REPLACE, ScreenResources.ICON_REPLACE_SOLID, + ScreenResources.ICON_REPLACE_ANY, ScreenResources.ICON_REPLACE_EMPTY); List toolTips = ImmutableList.of("Don't Replace Solid Blocks", "Replace Solid with Solid", "Replace Solid with Any", "Replace Solid with Empty"); for (int i = 0; i < 4; i++) { - replaceLevelIndicators.add(new GuiIndicator(x + 16 + i * 18, y + 96, "")); - replaceLevelButtons.add(new SimiButton(x + 16 + i * 18, y + 101, icons.get(i))); + replaceLevelIndicators.add(new Indicator(x + 16 + i * 18, y + 96, "")); + replaceLevelButtons.add(new IconButton(x + 16 + i * 18, y + 101, icons.get(i))); replaceLevelButtons.get(i).setToolTip(toolTips.get(i)); } widgets.addAll(replaceLevelButtons); widgets.addAll(replaceLevelIndicators); // Other Settings - skipMissingButton = new SimiButton(x + 106, y + 101, GuiResources.ICON_SKIP_MISSING); + skipMissingButton = new IconButton(x + 106, y + 101, ScreenResources.ICON_SKIP_MISSING); skipMissingButton.setToolTip("Skip missing Blocks"); - skipMissingIndicator = new GuiIndicator(x + 106, y + 96, ""); + skipMissingIndicator = new Indicator(x + 106, y + 96, ""); Collections.addAll(widgets, skipMissingButton, skipMissingIndicator); - skipTilesButton = new SimiButton(x + 124, y + 101, GuiResources.ICON_SKIP_TILES); + skipTilesButton = new IconButton(x + 124, y + 101, ScreenResources.ICON_SKIP_TILES); skipTilesButton.setToolTip("Protect Tile Entities"); - skipTilesIndicator = new GuiIndicator(x + 124, y + 96, ""); + skipTilesIndicator = new Indicator(x + 124, y + 96, ""); Collections.addAll(widgets, skipTilesButton, skipTilesIndicator); tick(); @@ -140,10 +140,10 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen= fuelX && mouseY >= fuelY && mouseX <= fuelX + GuiResources.SCHEMATICANNON_FUEL.width - && mouseY <= fuelY + GuiResources.SCHEMATICANNON_FUEL.height) { + if (mouseX >= fuelX && mouseY >= fuelY && mouseX <= fuelX + ScreenResources.SCHEMATICANNON_FUEL.width + && mouseY <= fuelY + ScreenResources.SCHEMATICANNON_FUEL.height) { container.getTileEntity(); SchematicannonTileEntity te = container.getTileEntity(); int shotsLeft = (int) (te.fuelLevel / SchematicannonTileEntity.FUEL_USAGE_RATE); @@ -331,8 +331,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen callback; private Consumer abortCallback; @@ -22,7 +22,7 @@ public class GuiTextPrompt extends AbstractSimiScreen { private boolean confirmed; - public GuiTextPrompt(Consumer callBack, Consumer abortCallback) { + public TextInputPromptScreen(Consumer callBack, Consumer abortCallback) { super(); this.callback = callBack; this.abortCallback = abortCallback; @@ -35,7 +35,7 @@ public class GuiTextPrompt extends AbstractSimiScreen { @Override public void init() { super.init(); - setWindowSize(GuiResources.TEXT_INPUT.width, GuiResources.TEXT_INPUT.height + 30); + setWindowSize(ScreenResources.TEXT_INPUT.width, ScreenResources.TEXT_INPUT.height + 30); this.nameField = new TextFieldWidget(font, topLeftX + 33, topLeftY + 26, 128, 8, ""); this.nameField.setTextColor(-1); @@ -61,9 +61,9 @@ public class GuiTextPrompt extends AbstractSimiScreen { @Override public void renderWindow(int mouseX, int mouseY, float partialTicks) { - GuiResources.TEXT_INPUT.draw(this, topLeftX, topLeftY); + ScreenResources.TEXT_INPUT.draw(this, topLeftX, topLeftY); font.drawString(title, topLeftX + (sWidth / 2) - (font.getStringWidth(title) / 2), topLeftY + 11, - GuiResources.FONT_COLOR); + ScreenResources.FONT_COLOR); } @Override diff --git a/src/main/java/com/simibubi/create/gui/ToolSelectionScreen.java b/src/main/java/com/simibubi/create/gui/ToolSelectionScreen.java index 03023ba72..e4e41ed90 100644 --- a/src/main/java/com/simibubi/create/gui/ToolSelectionScreen.java +++ b/src/main/java/com/simibubi/create/gui/ToolSelectionScreen.java @@ -4,10 +4,12 @@ import java.util.List; import java.util.function.Consumer; import com.mojang.blaze3d.platform.GlStateManager; -import com.simibubi.create.schematic.Tools; +import com.simibubi.create.Create; +import com.simibubi.create.schematic.tools.Tools; import net.minecraft.client.MainWindow; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.screen.Screen; import net.minecraft.util.text.StringTextComponent; @@ -33,7 +35,7 @@ public class ToolSelectionScreen extends Screen { callback.accept(tools.get(selection)); - w = tools.size() * 50 + 30; + w = Math.max(tools.size() * 50 + 30, 220); h = 30; } @@ -55,16 +57,46 @@ public class ToolSelectionScreen extends Screen { int y = mainWindow.getScaledHeight() - h - 75; GlStateManager.pushMatrix(); - GlStateManager.translatef(0, -yOffset, 0); + GlStateManager.translatef(0, -yOffset, focused? 100 : 0); - GuiResources gray = GuiResources.GRAY; + ScreenResources gray = ScreenResources.GRAY; GlStateManager.enableBlend(); - GlStateManager.enableAlphaTest(); GlStateManager.color4f(1, 1, 1, focused? 7 / 8f : 1 / 2f); Minecraft.getInstance().getTextureManager().bindTexture(gray.location); blit(x - 15, y, gray.startX, gray.startY, w, h, gray.width, gray.height); + + float toolTipAlpha = yOffset / 10; + FontRenderer font = minecraft.fontRenderer; + List toolTip = tools.get(selection).getDescription(); + int stringAlphaComponent = ((int) (toolTipAlpha * 0xFF)) << 24; + + if (toolTipAlpha > 0.25f) { + GlStateManager.color4f(.7f, .7f, .8f, toolTipAlpha); + blit(x - 15, y + 33, gray.startX, gray.startY, w, h + 22, gray.width, gray.height); + GlStateManager.color4f(1, 1, 1, 1); + + if (toolTip.size() > 0) + drawString(font, toolTip.get(0), x - 10, y + 38, 0xEEEEEE + stringAlphaComponent); + if (toolTip.size() > 1) + drawString(font, toolTip.get(1), x - 10, y + 50, 0xCCDDFF + stringAlphaComponent); + if (toolTip.size() > 2) + drawString(font, toolTip.get(2), x - 10, y + 60, 0xCCDDFF + stringAlphaComponent); + if (toolTip.size() > 3) + drawString(font, toolTip.get(3), x - 10, y + 72, 0xCCCCDD + stringAlphaComponent); + } + GlStateManager.color4f(1, 1, 1, 1); + if (tools.size() > 1) { + String translationKey = Create.TOOL_MENU.getLocalizedName().toUpperCase(); + int width = minecraft.mainWindow.getScaledWidth(); + if (!focused) + drawCenteredString(minecraft.fontRenderer, "Hold [" + translationKey + "] to focus", width/2, y - 10, 0xCCDDFF); + else + drawCenteredString(minecraft.fontRenderer, "[SCROLL] to Cycle", width/2, y - 10, 0xCCDDFF); + } else { + x += 65; + } for (int i = 0; i < tools.size(); i++) { GlStateManager.pushMatrix(); diff --git a/src/main/java/com/simibubi/create/gui/widgets/GuiIndicator.java b/src/main/java/com/simibubi/create/gui/widgets/GuiIndicator.java deleted file mode 100644 index 26d44d516..000000000 --- a/src/main/java/com/simibubi/create/gui/widgets/GuiIndicator.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.simibubi.create.gui.widgets; - -import com.google.common.collect.ImmutableList; -import com.simibubi.create.gui.GuiResources; - -public class GuiIndicator extends AbstractSimiWidget { - - public enum State { - OFF, ON, - RED, YELLOW, GREEN; - } - - public State state; - - public GuiIndicator(int x, int y, String tooltip) { - super(x, y, GuiResources.INDICATOR.width, GuiResources.INDICATOR.height); - this.toolTip = ImmutableList.of(tooltip); - this.state = State.OFF; - } - - @Override - public void render(int mouseX, int mouseY, float partialTicks ) { - GuiResources toDraw; - switch(state) { - case ON: toDraw = GuiResources.INDICATOR_WHITE; break; - case OFF: toDraw = GuiResources.INDICATOR; break; - case RED: toDraw = GuiResources.INDICATOR_RED; break; - case YELLOW: toDraw = GuiResources.INDICATOR_YELLOW; break; - case GREEN: toDraw = GuiResources.INDICATOR_GREEN; break; - default: toDraw = GuiResources.INDICATOR; break; - } - toDraw.draw(this, x, y); - } - -} diff --git a/src/main/java/com/simibubi/create/gui/widgets/SimiButton.java b/src/main/java/com/simibubi/create/gui/widgets/IconButton.java similarity index 74% rename from src/main/java/com/simibubi/create/gui/widgets/SimiButton.java rename to src/main/java/com/simibubi/create/gui/widgets/IconButton.java index 58b60ab79..4527ef5d7 100644 --- a/src/main/java/com/simibubi/create/gui/widgets/SimiButton.java +++ b/src/main/java/com/simibubi/create/gui/widgets/IconButton.java @@ -1,17 +1,17 @@ package com.simibubi.create.gui.widgets; import com.mojang.blaze3d.platform.GlStateManager; -import com.simibubi.create.gui.GuiResources; +import com.simibubi.create.gui.ScreenResources; import net.minecraft.client.Minecraft; import net.minecraft.util.ResourceLocation; -public class SimiButton extends AbstractSimiWidget { +public class IconButton extends AbstractSimiWidget { - private GuiResources icon; + private ScreenResources icon; protected boolean pressed; - public SimiButton(int x, int y, GuiResources icon) { + public IconButton(int x, int y, ScreenResources icon) { super(x, y, 18, 18); this.icon = icon; } @@ -19,14 +19,14 @@ public class SimiButton extends AbstractSimiWidget { @Override public void renderButton(int mouseX, int mouseY, float partialTicks) { if (this.visible) { - ResourceLocation buttonTextures = GuiResources.BUTTON.location; + ResourceLocation buttonTextures = ScreenResources.BUTTON.location; ResourceLocation iconTexture = icon.location; this.isHovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - GuiResources button = - (pressed || !active) ? button = GuiResources.BUTTON_DOWN : - (isHovered) ? GuiResources.BUTTON_HOVER : - GuiResources.BUTTON; + ScreenResources button = + (pressed || !active) ? button = ScreenResources.BUTTON_DOWN : + (isHovered) ? ScreenResources.BUTTON_HOVER : + ScreenResources.BUTTON; GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getInstance().getTextureManager().bindTexture(buttonTextures); diff --git a/src/main/java/com/simibubi/create/gui/widgets/Indicator.java b/src/main/java/com/simibubi/create/gui/widgets/Indicator.java new file mode 100644 index 000000000..44670ae46 --- /dev/null +++ b/src/main/java/com/simibubi/create/gui/widgets/Indicator.java @@ -0,0 +1,35 @@ +package com.simibubi.create.gui.widgets; + +import com.google.common.collect.ImmutableList; +import com.simibubi.create.gui.ScreenResources; + +public class Indicator extends AbstractSimiWidget { + + public enum State { + OFF, ON, + RED, YELLOW, GREEN; + } + + public State state; + + public Indicator(int x, int y, String tooltip) { + super(x, y, ScreenResources.INDICATOR.width, ScreenResources.INDICATOR.height); + this.toolTip = ImmutableList.of(tooltip); + this.state = State.OFF; + } + + @Override + public void render(int mouseX, int mouseY, float partialTicks ) { + ScreenResources toDraw; + switch(state) { + case ON: toDraw = ScreenResources.INDICATOR_WHITE; break; + case OFF: toDraw = ScreenResources.INDICATOR; break; + case RED: toDraw = ScreenResources.INDICATOR_RED; break; + case YELLOW: toDraw = ScreenResources.INDICATOR_YELLOW; break; + case GREEN: toDraw = ScreenResources.INDICATOR_GREEN; break; + default: toDraw = ScreenResources.INDICATOR; break; + } + toDraw.draw(this, x, y); + } + +} diff --git a/src/main/java/com/simibubi/create/gui/widgets/DynamicLabel.java b/src/main/java/com/simibubi/create/gui/widgets/Label.java similarity index 80% rename from src/main/java/com/simibubi/create/gui/widgets/DynamicLabel.java rename to src/main/java/com/simibubi/create/gui/widgets/Label.java index d6bacabaa..074fbdaf6 100644 --- a/src/main/java/com/simibubi/create/gui/widgets/DynamicLabel.java +++ b/src/main/java/com/simibubi/create/gui/widgets/Label.java @@ -3,14 +3,14 @@ package com.simibubi.create.gui.widgets; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -public class DynamicLabel extends AbstractSimiWidget { +public class Label extends AbstractSimiWidget { public String text; protected boolean hasShadow; protected int color; protected FontRenderer font; - public DynamicLabel(int x, int y, String text) { + public Label(int x, int y, String text) { super(x, y, Minecraft.getInstance().fontRenderer.getStringWidth(text), 10); font = Minecraft.getInstance().fontRenderer; this.text = "Label"; @@ -18,12 +18,12 @@ public class DynamicLabel extends AbstractSimiWidget { hasShadow = false; } - public DynamicLabel colored(int color) { + public Label colored(int color) { this.color = color; return this; } - public DynamicLabel withShadow() { + public Label withShadow() { this.hasShadow = true; return this; } diff --git a/src/main/java/com/simibubi/create/gui/widgets/ScrollArea.java b/src/main/java/com/simibubi/create/gui/widgets/ScrollInput.java similarity index 92% rename from src/main/java/com/simibubi/create/gui/widgets/ScrollArea.java rename to src/main/java/com/simibubi/create/gui/widgets/ScrollInput.java index fbf0f6ed9..fb77c4d7c 100644 --- a/src/main/java/com/simibubi/create/gui/widgets/ScrollArea.java +++ b/src/main/java/com/simibubi/create/gui/widgets/ScrollInput.java @@ -2,44 +2,44 @@ package com.simibubi.create.gui.widgets; import java.util.function.Consumer; -import com.simibubi.create.gui.Keyboard; +import com.simibubi.create.utility.Keyboard; import net.minecraft.util.text.TextFormatting; -public class ScrollArea extends AbstractSimiWidget { +public class ScrollInput extends AbstractSimiWidget { protected Consumer onScroll; protected int state; protected String title = "Choose an option"; - protected DynamicLabel displayLabel; + protected Label displayLabel; protected int min, max; - public ScrollArea(int xIn, int yIn, int widthIn, int heightIn) { + public ScrollInput(int xIn, int yIn, int widthIn, int heightIn) { super(xIn, yIn, widthIn, heightIn); state = 0; min = 0; max = 1; } - public ScrollArea withRange(int min, int max) { + public ScrollInput withRange(int min, int max) { this.min = min; this.max = max; return this; } - public ScrollArea calling(Consumer onScroll) { + public ScrollInput calling(Consumer onScroll) { this.onScroll = onScroll; return this; } - public ScrollArea titled(String title) { + public ScrollInput titled(String title) { this.title = title; updateTooltip(); return this; } - public ScrollArea writingTo(DynamicLabel label) { + public ScrollInput writingTo(Label label) { this.displayLabel = label; writeToLabel(); return this; @@ -49,7 +49,7 @@ public class ScrollArea extends AbstractSimiWidget { return state; } - public ScrollArea setState(int state) { + public ScrollInput setState(int state) { this.state = state; clampState(); updateTooltip(); diff --git a/src/main/java/com/simibubi/create/gui/widgets/OptionScrollArea.java b/src/main/java/com/simibubi/create/gui/widgets/SelectionScrollInput.java similarity index 83% rename from src/main/java/com/simibubi/create/gui/widgets/OptionScrollArea.java rename to src/main/java/com/simibubi/create/gui/widgets/SelectionScrollInput.java index 210376ade..5842b2e62 100644 --- a/src/main/java/com/simibubi/create/gui/widgets/OptionScrollArea.java +++ b/src/main/java/com/simibubi/create/gui/widgets/SelectionScrollInput.java @@ -5,16 +5,16 @@ import java.util.List; import net.minecraft.util.text.TextFormatting; -public class OptionScrollArea extends ScrollArea { +public class SelectionScrollInput extends ScrollInput { protected List options; - public OptionScrollArea(int xIn, int yIn, int widthIn, int heightIn) { + public SelectionScrollInput(int xIn, int yIn, int widthIn, int heightIn) { super(xIn, yIn, widthIn, heightIn); options = new ArrayList<>(); } - public ScrollArea forOptions(List options) { + public ScrollInput forOptions(List options) { this.options = options; this.max = options.size(); updateTooltip(); diff --git a/src/main/java/com/simibubi/create/item/BlueprintAndQuillItem.java b/src/main/java/com/simibubi/create/item/BlueprintAndQuillItem.java new file mode 100644 index 000000000..46b4ca8cd --- /dev/null +++ b/src/main/java/com/simibubi/create/item/BlueprintAndQuillItem.java @@ -0,0 +1,45 @@ +package com.simibubi.create.item; + +import java.util.List; + +import com.simibubi.create.utility.Keyboard; + +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; + +public class BlueprintAndQuillItem extends Item { + + public BlueprintAndQuillItem(Properties properties) { + super(properties); + } + + @Override + public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { + if (Keyboard.isKeyDown(Keyboard.LSHIFT)) { + TextFormatting gray = TextFormatting.GRAY; + TextFormatting blue = TextFormatting.BLUE; + + tooltip.add(new StringTextComponent(gray + "Saves selected blocks in a Schematic File.")); + tooltip.add(new StringTextComponent("")); + tooltip.add(new StringTextComponent(blue + "Step 1: Select two corner points")); + tooltip.add(new StringTextComponent(gray + "Hold [CTRL] to select at a fixed distance.")); + tooltip.add(new StringTextComponent(gray + "[CTRL]-Scroll to modify the distance.")); + tooltip.add(new StringTextComponent("Right-Click to put a point.")); + tooltip.add(new StringTextComponent("")); + tooltip.add(new StringTextComponent(blue + "Step 2: Adjust the bounding box")); + tooltip.add(new StringTextComponent(gray + "Point at the Selection and use")); + tooltip.add(new StringTextComponent(gray + "[CTRL]-Scroll to move the face in-/outward.")); + tooltip.add(new StringTextComponent("Right-Click to save.")); + tooltip.add(new StringTextComponent("")); + tooltip.add(new StringTextComponent(gray + "Use Sneak-Right-Click to reset.")); + } else + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "< Hold Shift >")); + super.addInformation(stack, worldIn, tooltip, flagIn); + } + +} diff --git a/src/main/java/com/simibubi/create/item/ItemBlueprint.java b/src/main/java/com/simibubi/create/item/BlueprintItem.java similarity index 78% rename from src/main/java/com/simibubi/create/item/ItemBlueprint.java rename to src/main/java/com/simibubi/create/item/BlueprintItem.java index 693d8e383..4cf42ac6d 100644 --- a/src/main/java/com/simibubi/create/item/ItemBlueprint.java +++ b/src/main/java/com/simibubi/create/item/BlueprintItem.java @@ -5,13 +5,16 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; +import java.util.List; import org.apache.commons.io.IOUtils; import com.simibubi.create.AllItems; import com.simibubi.create.gui.BlueprintEditScreen; -import com.simibubi.create.gui.GuiOpener; +import com.simibubi.create.gui.ScreenOpener; +import com.simibubi.create.utility.Keyboard; +import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -25,6 +28,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; @@ -35,9 +39,9 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.thread.SidedThreadGroups; -public class ItemBlueprint extends Item { +public class BlueprintItem extends Item { - public ItemBlueprint(Properties properties) { + public BlueprintItem(Properties properties) { super(properties.maxStackSize(1)); } @@ -60,6 +64,21 @@ public class ItemBlueprint extends Item { return blueprint; } + @Override + @OnlyIn(value = Dist.CLIENT) + public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { + if (Keyboard.isKeyDown(Keyboard.LSHIFT)) { + TextFormatting gray = TextFormatting.GRAY; + tooltip.add(new StringTextComponent(gray + "Holds a structure to be printed")); + tooltip.add(new StringTextComponent(gray + "by the Schematicannon.")); + tooltip.add(new StringTextComponent("")); + tooltip.add(new StringTextComponent(gray + "Sneak R-Click to put coordinates.")); + tooltip.add(new StringTextComponent(gray + "Otherwise use the overlay to position it.")); + } else + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "< Hold Shift >")); + super.addInformation(stack, worldIn, tooltip, flagIn); + } + public static void writeSize(ItemStack blueprint) { CompoundNBT tag = blueprint.getTag(); Template t = getSchematic(blueprint); @@ -119,7 +138,7 @@ public class ItemBlueprint extends Item { @OnlyIn(value = Dist.CLIENT) protected void displayBlueprintScreen() { - GuiOpener.open(new BlueprintEditScreen()); + ScreenOpener.open(new BlueprintEditScreen()); } @Override diff --git a/src/main/java/com/simibubi/create/item/ItemBlueprintAndQuill.java b/src/main/java/com/simibubi/create/item/ItemBlueprintAndQuill.java deleted file mode 100644 index be1217d56..000000000 --- a/src/main/java/com/simibubi/create/item/ItemBlueprintAndQuill.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.simibubi.create.item; - -import net.minecraft.item.Item; - -public class ItemBlueprintAndQuill extends Item { - - public ItemBlueprintAndQuill(Properties properties) { - super(properties); - } - -} diff --git a/src/main/java/com/simibubi/create/item/SymmetryHandler.java b/src/main/java/com/simibubi/create/item/SymmetryHandler.java index 67e025332..1f6745f1c 100644 --- a/src/main/java/com/simibubi/create/item/SymmetryHandler.java +++ b/src/main/java/com/simibubi/create/item/SymmetryHandler.java @@ -51,7 +51,7 @@ public class SymmetryHandler { PlayerInventory inv = player.inventory; for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { if (!inv.getStackInSlot(i).isEmpty() && inv.getStackInSlot(i).getItem() == AllItems.SYMMETRY_WAND.get()) { - ItemWandSymmetry.apply(player.world, inv.getStackInSlot(i), player, event.getPos(), + SymmetryWandItem.apply(player.world, inv.getStackInSlot(i), player, event.getPos(), event.getPlacedBlock()); } } @@ -66,7 +66,7 @@ public class SymmetryHandler { PlayerInventory inv = player.inventory; for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { if (!inv.getStackInSlot(i).isEmpty() && AllItems.SYMMETRY_WAND.typeOf(inv.getStackInSlot(i))) { - ItemWandSymmetry.remove(player.world, inv.getStackInSlot(i), player, event.getPos()); + SymmetryWandItem.remove(player.world, inv.getStackInSlot(i), player, event.getPos()); } } } @@ -82,8 +82,8 @@ public class SymmetryHandler { for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { ItemStack stackInSlot = player.inventory.getStackInSlot(i); if (stackInSlot != null && AllItems.SYMMETRY_WAND.typeOf(stackInSlot) - && ItemWandSymmetry.isEnabled(stackInSlot)) { - SymmetryElement mirror = ItemWandSymmetry.getMirror(stackInSlot); + && SymmetryWandItem.isEnabled(stackInSlot)) { + SymmetryElement mirror = SymmetryWandItem.getMirror(stackInSlot); if (mirror instanceof SymmetryEmptySlot) continue; @@ -128,9 +128,9 @@ public class SymmetryHandler { ItemStack stackInSlot = player.inventory.getStackInSlot(i); if (stackInSlot != null && AllItems.SYMMETRY_WAND.typeOf(stackInSlot) - && ItemWandSymmetry.isEnabled(stackInSlot)) { + && SymmetryWandItem.isEnabled(stackInSlot)) { - SymmetryElement mirror = ItemWandSymmetry.getMirror(stackInSlot); + SymmetryElement mirror = SymmetryWandItem.getMirror(stackInSlot); if (mirror instanceof SymmetryEmptySlot) continue; diff --git a/src/main/java/com/simibubi/create/item/ItemWandSymmetry.java b/src/main/java/com/simibubi/create/item/SymmetryWandItem.java similarity index 80% rename from src/main/java/com/simibubi/create/item/ItemWandSymmetry.java rename to src/main/java/com/simibubi/create/item/SymmetryWandItem.java index 8873afb8b..df0d9d874 100644 --- a/src/main/java/com/simibubi/create/item/ItemWandSymmetry.java +++ b/src/main/java/com/simibubi/create/item/SymmetryWandItem.java @@ -5,18 +5,20 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.simibubi.create.gui.GuiOpener; -import com.simibubi.create.gui.GuiWandSymmetry; +import com.simibubi.create.gui.ScreenOpener; +import com.simibubi.create.gui.SymmetryWandScreen; import com.simibubi.create.item.symmetry.SymmetryCrossPlane; import com.simibubi.create.item.symmetry.SymmetryElement; import com.simibubi.create.item.symmetry.SymmetryEmptySlot; import com.simibubi.create.item.symmetry.SymmetryPlane; -import com.simibubi.create.networking.PacketSymmetryEffect; -import com.simibubi.create.networking.Packets; +import com.simibubi.create.networking.SymmetryEffectPacket; +import com.simibubi.create.utility.Keyboard; +import com.simibubi.create.networking.AllPackets; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; @@ -31,6 +33,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; @@ -39,14 +42,33 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.network.PacketDistributor; -public class ItemWandSymmetry extends Item { +public class SymmetryWandItem extends Item { public static final String $SYMMETRY = "symmetry"; private static final String $ENABLE = "enable"; - public ItemWandSymmetry(Properties properties) { + public SymmetryWandItem(Properties properties) { super(properties.maxStackSize(1)); } + + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { + if (Keyboard.isKeyDown(Keyboard.LSHIFT)) { + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "Perfectly mirrors your Block placement")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "across the configured planes.")); + tooltip.add(new StringTextComponent("")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "> [Right-Click] on ground to place mirror")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "> [Right-Click] in air to configure mirror")); + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "> [Shift-Right-Click] to toggle")); + tooltip.add(new StringTextComponent("")); + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "Active while held in the Hotbar")); + + } else + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "< Hold Shift >")); + super.addInformation(stack, worldIn, tooltip, flagIn); + } @Override public ActionResultType onItemUse(ItemUseContext context) { @@ -122,7 +144,7 @@ public class ItemWandSymmetry extends Item { @OnlyIn(Dist.CLIENT) private void openWandGUI(ItemStack wand) { - GuiOpener.open(new GuiWandSymmetry(wand)); + ScreenOpener.open(new SymmetryWandScreen(wand)); } private static void checkNBT(ItemStack wand) { @@ -187,8 +209,8 @@ public class ItemWandSymmetry extends Item { } } - Packets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> player), - new PacketSymmetryEffect(to, targets)); + AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> player), + new SymmetryEffectPacket(to, targets)); } public static void remove(World world, ItemStack wand, PlayerEntity player, BlockPos pos) { @@ -235,8 +257,8 @@ public class ItemWandSymmetry extends Item { } } - Packets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> player), - new PacketSymmetryEffect(to, targets)); + AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> player), + new SymmetryEffectPacket(to, targets)); } } diff --git a/src/main/java/com/simibubi/create/item/ItemTreeFertilizer.java b/src/main/java/com/simibubi/create/item/TreeFertilizerItem.java similarity index 85% rename from src/main/java/com/simibubi/create/item/ItemTreeFertilizer.java rename to src/main/java/com/simibubi/create/item/TreeFertilizerItem.java index b817395e8..4a68312ce 100644 --- a/src/main/java/com/simibubi/create/item/ItemTreeFertilizer.java +++ b/src/main/java/com/simibubi/create/item/TreeFertilizerItem.java @@ -6,15 +6,19 @@ import java.util.List; import java.util.Random; import java.util.function.Predicate; +import com.simibubi.create.utility.Keyboard; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.SaplingBlock; +import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; import net.minecraft.item.BoneMealItem; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; import net.minecraft.item.crafting.RecipeManager; import net.minecraft.scoreboard.Scoreboard; @@ -23,16 +27,31 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.EmptyTickList; import net.minecraft.world.ITickList; import net.minecraft.world.World; import net.minecraft.world.storage.MapData; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -public class ItemTreeFertilizer extends Item { +public class TreeFertilizerItem extends Item { - public ItemTreeFertilizer(Properties properties) { + public TreeFertilizerItem(Properties properties) { super(properties); } + + @Override + @OnlyIn(Dist.CLIENT) + public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { + if (Keyboard.isKeyDown(Keyboard.LSHIFT)) + tooltip.add(new StringTextComponent(TextFormatting.GRAY + "Tree won't grow? Try this on it.")); + else + tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + "< Hold Shift >")); + super.addInformation(stack, worldIn, tooltip, flagIn); + } @Override public ActionResultType onItemUse(ItemUseContext context) { diff --git a/src/main/java/com/simibubi/create/item/symmetry/SymmetryCrossPlane.java b/src/main/java/com/simibubi/create/item/symmetry/SymmetryCrossPlane.java index e1579bc6a..4d11ee52c 100644 --- a/src/main/java/com/simibubi/create/item/symmetry/SymmetryCrossPlane.java +++ b/src/main/java/com/simibubi/create/item/symmetry/SymmetryCrossPlane.java @@ -6,7 +6,7 @@ import java.util.Map; import com.google.common.collect.ImmutableList; import com.simibubi.create.AllBlocks; -import com.simibubi.create.block.symmetry.BlockSymmetryCrossPlane; +import com.simibubi.create.block.symmetry.CrossPlaneSymmetryBlock; import net.minecraft.block.BlockState; import net.minecraft.util.IStringSerializable; @@ -84,7 +84,7 @@ public class SymmetryCrossPlane extends SymmetryElement { @Override public BlockState getModel() { - return AllBlocks.SYMMETRY_CROSSPLANE.block.getDefaultState().with(BlockSymmetryCrossPlane.align, + return AllBlocks.SYMMETRY_CROSSPLANE.block.getDefaultState().with(CrossPlaneSymmetryBlock.align, (Align) orientation); } diff --git a/src/main/java/com/simibubi/create/item/symmetry/SymmetryPlane.java b/src/main/java/com/simibubi/create/item/symmetry/SymmetryPlane.java index cae0b3a64..1aab2ddf7 100644 --- a/src/main/java/com/simibubi/create/item/symmetry/SymmetryPlane.java +++ b/src/main/java/com/simibubi/create/item/symmetry/SymmetryPlane.java @@ -6,7 +6,7 @@ import java.util.Map; import com.google.common.collect.ImmutableList; import com.simibubi.create.AllBlocks; -import com.simibubi.create.block.symmetry.BlockSymmetryPlane; +import com.simibubi.create.block.symmetry.PlaneSymmetryBlock; import net.minecraft.block.BlockState; import net.minecraft.util.IStringSerializable; @@ -80,7 +80,7 @@ public class SymmetryPlane extends SymmetryElement { @Override public BlockState getModel() { - return AllBlocks.SYMMETRY_PLANE.block.getDefaultState().with(BlockSymmetryPlane.align, (Align) orientation); + return AllBlocks.SYMMETRY_PLANE.block.getDefaultState().with(PlaneSymmetryBlock.align, (Align) orientation); } @Override diff --git a/src/main/java/com/simibubi/create/networking/AllPackets.java b/src/main/java/com/simibubi/create/networking/AllPackets.java new file mode 100644 index 000000000..fa070d7df --- /dev/null +++ b/src/main/java/com/simibubi/create/networking/AllPackets.java @@ -0,0 +1,30 @@ +package com.simibubi.create.networking; + +import com.simibubi.create.Create; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.network.simple.SimpleChannel; + +public class AllPackets { + + private static final String PROTOCOL_VERSION = "1"; + + public static SimpleChannel channel; + + public static void registerPackets() { + int i = 0; + + channel = NetworkRegistry.newSimpleChannel(new ResourceLocation(Create.ID, "main"), () -> PROTOCOL_VERSION, + PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals); + + channel.registerMessage(i++, NbtPacket.class, NbtPacket::toBytes, NbtPacket::new, NbtPacket::handle); + channel.registerMessage(i++, ConfigureSchematicannonPacket.class, ConfigureSchematicannonPacket::toBytes, + ConfigureSchematicannonPacket::new, ConfigureSchematicannonPacket::handle); + channel.registerMessage(i++, SchematicUploadPacket.class, SchematicUploadPacket::toBytes, + SchematicUploadPacket::new, SchematicUploadPacket::handle); + channel.registerMessage(i++, SymmetryEffectPacket.class, SymmetryEffectPacket::toBytes, + SymmetryEffectPacket::new, SymmetryEffectPacket::handle); + } + +} diff --git a/src/main/java/com/simibubi/create/networking/PacketConfigureSchematicannon.java b/src/main/java/com/simibubi/create/networking/ConfigureSchematicannonPacket.java similarity index 87% rename from src/main/java/com/simibubi/create/networking/PacketConfigureSchematicannon.java rename to src/main/java/com/simibubi/create/networking/ConfigureSchematicannonPacket.java index aa5590e9a..b60e05d9b 100644 --- a/src/main/java/com/simibubi/create/networking/PacketConfigureSchematicannon.java +++ b/src/main/java/com/simibubi/create/networking/ConfigureSchematicannonPacket.java @@ -12,7 +12,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkEvent.Context; -public class PacketConfigureSchematicannon { +public class ConfigureSchematicannonPacket { public static enum Option { DONT_REPLACE, REPLACE_SOLID, REPLACE_ANY, REPLACE_EMPTY, SKIP_MISSING, SKIP_TILES, PLAY, PAUSE, STOP; @@ -22,18 +22,18 @@ public class PacketConfigureSchematicannon { private boolean set; private BlockPos pos; - public static PacketConfigureSchematicannon setOption(BlockPos pos, Option option, boolean set) { - PacketConfigureSchematicannon packet = new PacketConfigureSchematicannon(pos); + public static ConfigureSchematicannonPacket setOption(BlockPos pos, Option option, boolean set) { + ConfigureSchematicannonPacket packet = new ConfigureSchematicannonPacket(pos); packet.option = option; packet.set = set; return packet; } - public PacketConfigureSchematicannon(BlockPos pos) { + public ConfigureSchematicannonPacket(BlockPos pos) { this.pos = pos; } - public PacketConfigureSchematicannon(PacketBuffer buffer) { + public ConfigureSchematicannonPacket(PacketBuffer buffer) { pos = buffer.readBlockPos(); option = Option.values()[buffer.readInt()]; set = buffer.readBoolean(); diff --git a/src/main/java/com/simibubi/create/networking/PacketNbt.java b/src/main/java/com/simibubi/create/networking/NbtPacket.java similarity index 87% rename from src/main/java/com/simibubi/create/networking/PacketNbt.java rename to src/main/java/com/simibubi/create/networking/NbtPacket.java index acd64d186..548232ab5 100644 --- a/src/main/java/com/simibubi/create/networking/PacketNbt.java +++ b/src/main/java/com/simibubi/create/networking/NbtPacket.java @@ -7,21 +7,21 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent.Context; -public class PacketNbt { +public class NbtPacket { public ItemStack stack; public int slot; - public PacketNbt(ItemStack stack) { + public NbtPacket(ItemStack stack) { this(stack, -1); } - public PacketNbt(ItemStack stack, int slot) { + public NbtPacket(ItemStack stack, int slot) { this.stack = stack; this.slot = slot; } - public PacketNbt(PacketBuffer buffer) { + public NbtPacket(PacketBuffer buffer) { stack = buffer.readItemStack(); slot = buffer.readInt(); } diff --git a/src/main/java/com/simibubi/create/networking/Packets.java b/src/main/java/com/simibubi/create/networking/Packets.java deleted file mode 100644 index 2fd1055ee..000000000 --- a/src/main/java/com/simibubi/create/networking/Packets.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.simibubi.create.networking; - -import com.simibubi.create.Create; - -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.network.NetworkRegistry; -import net.minecraftforge.fml.network.simple.SimpleChannel; - -public class Packets { - - private static final String PROTOCOL_VERSION = "1"; - - public static SimpleChannel channel; - - public static void registerPackets() { - int i = 0; - - channel = NetworkRegistry.newSimpleChannel(new ResourceLocation(Create.ID, "main"), () -> PROTOCOL_VERSION, - PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals); - - channel.registerMessage(i++, PacketNbt.class, PacketNbt::toBytes, PacketNbt::new, PacketNbt::handle); - channel.registerMessage(i++, PacketConfigureSchematicannon.class, PacketConfigureSchematicannon::toBytes, - PacketConfigureSchematicannon::new, PacketConfigureSchematicannon::handle); - channel.registerMessage(i++, PacketSchematicUpload.class, PacketSchematicUpload::toBytes, - PacketSchematicUpload::new, PacketSchematicUpload::handle); - channel.registerMessage(i++, PacketSymmetryEffect.class, PacketSymmetryEffect::toBytes, - PacketSymmetryEffect::new, PacketSymmetryEffect::handle); - } - -} diff --git a/src/main/java/com/simibubi/create/networking/PacketSchematicUpload.java b/src/main/java/com/simibubi/create/networking/SchematicUploadPacket.java similarity index 78% rename from src/main/java/com/simibubi/create/networking/PacketSchematicUpload.java rename to src/main/java/com/simibubi/create/networking/SchematicUploadPacket.java index 19fc3c109..4fdf6475e 100644 --- a/src/main/java/com/simibubi/create/networking/PacketSchematicUpload.java +++ b/src/main/java/com/simibubi/create/networking/SchematicUploadPacket.java @@ -11,7 +11,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.ServerWorld; import net.minecraftforge.fml.network.NetworkEvent.Context; -public class PacketSchematicUpload { +public class SchematicUploadPacket { public static final int BEGIN = 0; public static final int WRITE = 1; @@ -22,28 +22,28 @@ public class PacketSchematicUpload { private String schematic; private byte[] data; - public PacketSchematicUpload(int code, String schematic) { + public SchematicUploadPacket(int code, String schematic) { this.code = code; this.schematic = schematic; } - public static PacketSchematicUpload begin(String schematic, long size) { - PacketSchematicUpload pkt = new PacketSchematicUpload(BEGIN, schematic); + public static SchematicUploadPacket begin(String schematic, long size) { + SchematicUploadPacket pkt = new SchematicUploadPacket(BEGIN, schematic); pkt.size = size; return pkt; } - public static PacketSchematicUpload write(String schematic, byte[] data) { - PacketSchematicUpload pkt = new PacketSchematicUpload(WRITE, schematic); + public static SchematicUploadPacket write(String schematic, byte[] data) { + SchematicUploadPacket pkt = new SchematicUploadPacket(WRITE, schematic); pkt.data = data; return pkt; } - public static PacketSchematicUpload finish(String schematic) { - return new PacketSchematicUpload(FINISH, schematic); + public static SchematicUploadPacket finish(String schematic) { + return new SchematicUploadPacket(FINISH, schematic); } - public PacketSchematicUpload(PacketBuffer buffer) { + public SchematicUploadPacket(PacketBuffer buffer) { code = buffer.readInt(); schematic = buffer.readString(256); diff --git a/src/main/java/com/simibubi/create/networking/PacketSymmetryEffect.java b/src/main/java/com/simibubi/create/networking/SymmetryEffectPacket.java similarity index 88% rename from src/main/java/com/simibubi/create/networking/PacketSymmetryEffect.java rename to src/main/java/com/simibubi/create/networking/SymmetryEffectPacket.java index 9f75e432d..255113581 100644 --- a/src/main/java/com/simibubi/create/networking/PacketSymmetryEffect.java +++ b/src/main/java/com/simibubi/create/networking/SymmetryEffectPacket.java @@ -12,17 +12,17 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraftforge.fml.network.NetworkEvent.Context; -public class PacketSymmetryEffect { +public class SymmetryEffectPacket { private BlockPos mirror; private List positions; - public PacketSymmetryEffect(BlockPos mirror, List positions) { + public SymmetryEffectPacket(BlockPos mirror, List positions) { this.mirror = mirror; this.positions = positions; } - public PacketSymmetryEffect(PacketBuffer buffer) { + public SymmetryEffectPacket(PacketBuffer buffer) { mirror = buffer.readBlockPos(); int amt = buffer.readInt(); positions = new ArrayList<>(amt); diff --git a/src/main/java/com/simibubi/create/schematic/BlueprintAndQuillHandler.java b/src/main/java/com/simibubi/create/schematic/BlueprintAndQuillHandler.java index db1ddbcdb..683c5a9b0 100644 --- a/src/main/java/com/simibubi/create/schematic/BlueprintAndQuillHandler.java +++ b/src/main/java/com/simibubi/create/schematic/BlueprintAndQuillHandler.java @@ -11,28 +11,36 @@ import org.lwjgl.glfw.GLFW; import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllItems; -import com.simibubi.create.gui.GuiOpener; -import com.simibubi.create.gui.GuiTextPrompt; -import com.simibubi.create.gui.Keyboard; +import com.simibubi.create.gui.ScreenOpener; +import com.simibubi.create.gui.TextInputPromptScreen; import com.simibubi.create.utility.FilesHelper; +import com.simibubi.create.utility.Keyboard; import com.simibubi.create.utility.RaycastHelper; +import com.simibubi.create.utility.RaycastHelper.PredicateTraceResult; import com.simibubi.create.utility.TessellatorHelper; +import com.simibubi.create.utility.TessellatorTextures; import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemUseContext; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MutableBoundingBox; import net.minecraft.util.math.RayTraceResult.Type; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.gen.feature.template.Template; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent; @@ -47,7 +55,9 @@ import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; public class BlueprintAndQuillHandler { static BlockPos firstPos; + static BlockPos secondPos; static BlockPos selectedPos; + static Direction selectedFace; static int range = 10; private static boolean active() { @@ -56,11 +66,12 @@ public class BlueprintAndQuillHandler { private static boolean present() { return Minecraft.getInstance() != null && Minecraft.getInstance().world != null - && Minecraft.getInstance().currentScreen == null && !Minecraft.getInstance().player.isSneaking(); + && Minecraft.getInstance().currentScreen == null; } @SubscribeEvent - // TODO: This is a fabricated event call by ScrollFixer until a proper event exists + // TODO: This is a fabricated event call by ScrollFixer until a proper event + // exists public static void onMouseScrolled(MouseScrollEvent.Post event) { if (event.getGui() != null) return; @@ -68,7 +79,33 @@ public class BlueprintAndQuillHandler { return; if (!Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL)) return; - range = (int) MathHelper.clamp(range + event.getScrollDelta(), 1, 100); + int delta = (int) event.getScrollDelta(); + if (secondPos == null) + range = (int) MathHelper.clamp(range + delta, 1, 100); + if (selectedFace != null) { + MutableBoundingBox bb = new MutableBoundingBox(firstPos, secondPos); + Vec3i vec = selectedFace.getDirectionVec(); + + int x = vec.getX() * delta; + int y = vec.getY() * delta; + int z = vec.getZ() * delta; + + AxisDirection axisDirection = selectedFace.getAxisDirection(); + if (axisDirection == AxisDirection.NEGATIVE) + bb.offset(-x, -y, -z); + + bb.maxX = Math.max(bb.maxX - x * axisDirection.getOffset(), bb.minX); + bb.maxY = Math.max(bb.maxY - y * axisDirection.getOffset(), bb.minY); + bb.maxZ = Math.max(bb.maxZ - z * axisDirection.getOffset(), bb.minZ); + + firstPos = new BlockPos(bb.minX, bb.minY, bb.minZ); + secondPos = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); + Minecraft.getInstance().player.sendStatusMessage( + new StringTextComponent( + "Schematic size: " + (bb.getXSize()) + "x" + (bb.getYSize()) + "x" + (bb.getZSize())), + true); + } + event.setCanceled(true); } @@ -78,32 +115,45 @@ public class BlueprintAndQuillHandler { return; if (event.getButton() != 1) return; - if (!active() && !Minecraft.getInstance().player.isSneaking()) + if (!active()) return; - if (selectedPos == null) - return; - if (Minecraft.getInstance().player.isSneaking()) { + ClientPlayerEntity player = Minecraft.getInstance().player; + + if (player.isSneaking()) { firstPos = null; + secondPos = null; + player.sendStatusMessage(new StringTextComponent("Removed selection."), true); return; } - if (firstPos != null) { - GuiTextPrompt guiScreenIn = new GuiTextPrompt(BlueprintAndQuillHandler::saveSchematic, s -> { - firstPos = null; + if (secondPos != null) { + TextInputPromptScreen guiScreenIn = new TextInputPromptScreen(BlueprintAndQuillHandler::saveSchematic, s -> { }); guiScreenIn.setTitle("Enter a name for the Schematic:"); guiScreenIn.setButtonTextConfirm("Save"); guiScreenIn.setButtonTextAbort("Cancel"); - GuiOpener.open(guiScreenIn); + ScreenOpener.open(guiScreenIn); + return; + } + + if (selectedPos == null) { + player.sendStatusMessage(new StringTextComponent("Hold [CTRL] to select Air blocks."), true); + return; + } + + if (firstPos != null) { + secondPos = selectedPos; + player.sendStatusMessage(new StringTextComponent(TextFormatting.GREEN + "Second position set."), true); return; } firstPos = selectedPos; + player.sendStatusMessage(new StringTextComponent(TextFormatting.GREEN + "First position set."), true); } public static void saveSchematic(String string) { Template t = new Template(); - MutableBoundingBox bb = new MutableBoundingBox(firstPos, selectedPos); + MutableBoundingBox bb = new MutableBoundingBox(firstPos, secondPos); t.takeBlocksFromWorld(Minecraft.getInstance().world, new BlockPos(bb.minX, bb.minY, bb.minZ), new BlockPos(bb.getXSize(), bb.getYSize(), bb.getZSize()), false, Blocks.AIR); @@ -127,6 +177,7 @@ public class BlueprintAndQuillHandler { IOUtils.closeQuietly(outputStream); } firstPos = null; + secondPos = null; Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent("Saved as " + filepath), true); } @@ -136,29 +187,60 @@ public class BlueprintAndQuillHandler { return; TessellatorHelper.prepareForDrawing(); - GlStateManager.lineWidth(3); + GlStateManager.lineWidth(2); GlStateManager.color4f(1, 1, 1, 1); GlStateManager.disableTexture(); - if (firstPos != null) { - MutableBoundingBox bb = new MutableBoundingBox(firstPos, firstPos.add(1, 1, 1)); - BlockPos min = new BlockPos(bb.minX, bb.minY, bb.minZ); - BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); - drawBox(min, max); - } - - if (selectedPos != null) { - MutableBoundingBox bb = new MutableBoundingBox(selectedPos, selectedPos.add(1, 1, 1)); - BlockPos min = new BlockPos(bb.minX, bb.minY, bb.minZ); - BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); - drawBox(min, max); - - if (firstPos != null) { - bb = new MutableBoundingBox(firstPos, selectedPos); - min = new BlockPos(bb.minX, bb.minY, bb.minZ); - max = new BlockPos(bb.maxX + 1, bb.maxY + 1, bb.maxZ + 1); - drawBox(min, max); + if (secondPos == null) { + // 1st Step + if (firstPos != null && selectedPos == null) { + MutableBoundingBox bb = new MutableBoundingBox(firstPos, firstPos.add(1, 1, 1)); + BlockPos min = new BlockPos(bb.minX, bb.minY, bb.minZ); + BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); + drawBox(min, max, true); } + + if (firstPos != null && selectedPos != null) { + MutableBoundingBox bb = new MutableBoundingBox(firstPos, selectedPos); + BlockPos min = new BlockPos(bb.minX, bb.minY, bb.minZ); + BlockPos max = new BlockPos(bb.maxX + 1, bb.maxY + 1, bb.maxZ + 1); + drawBox(min, max, true); + } + + if (firstPos == null && selectedPos != null) { + MutableBoundingBox bb = new MutableBoundingBox(selectedPos, selectedPos.add(1, 1, 1)); + BlockPos min = new BlockPos(bb.minX, bb.minY, bb.minZ); + BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); + drawBox(min, max, true); + } + } else { + // 2nd Step + MutableBoundingBox bb = new MutableBoundingBox(firstPos, secondPos); + BlockPos min = new BlockPos(bb.minX, bb.minY, bb.minZ); + BlockPos max = new BlockPos(bb.maxX + 1, bb.maxY + 1, bb.maxZ + 1); + drawBox(min, max, false); + + if (selectedFace != null) { + Vec3d vec = new Vec3d(selectedFace.getDirectionVec()); + Vec3d center = new Vec3d(min.add(max)).scale(1 / 2f); + Vec3d radii = new Vec3d(max.subtract(min)).scale(1 / 2f); + + Vec3d onFaceOffset = new Vec3d(1 - Math.abs(vec.x), 1 - Math.abs(vec.y), 1 - Math.abs(vec.z)) + .mul(radii); + Vec3d faceMin = center.add(vec.mul(radii).add(onFaceOffset)); + Vec3d faceMax = center.add(vec.mul(radii).subtract(onFaceOffset)); + + GlStateManager.enableTexture(); + TessellatorHelper.begin(); + TessellatorTextures.SelectedRoom.bind(); + TessellatorHelper.doubleFace(Tessellator.getInstance().getBuffer(), new BlockPos(faceMin), + new BlockPos(faceMax.subtract(faceMin)), 1 / 16f * selectedFace.getAxisDirection().getOffset(), + false, false, false); + TessellatorHelper.draw(); + GlStateManager.disableTexture(); + + } + } GlStateManager.lineWidth(1); @@ -166,9 +248,11 @@ public class BlueprintAndQuillHandler { TessellatorHelper.cleanUpAfterDrawing(); } - protected static void drawBox(BlockPos min, BlockPos max) { - WorldRenderer.drawBoundingBox(min.getX() - 1 / 16d, min.getY() - 1 / 16d, min.getZ() - 1 / 16d, - max.getX() + 1 / 16d, max.getY() + 1 / 16d, max.getZ() + 1 / 16d, .3f, .4f, 1, 1); + protected static void drawBox(BlockPos min, BlockPos max, boolean blue) { + float red = blue ? .8f : 1; + float green = blue ? .9f : 1; + WorldRenderer.drawBoundingBox(min.getX() - 1 / 16d, min.getY() + 1 / 16d, min.getZ() - 1 / 16d, + max.getX() + 1 / 16d, max.getY() + 1 / 16d, max.getZ() + 1 / 16d, red, green, 1, 1); } @SubscribeEvent @@ -197,5 +281,17 @@ public class BlueprintAndQuillHandler { } } + if (secondPos == null) { + selectedFace = null; + return; + } + + MutableBoundingBox bb = new MutableBoundingBox(firstPos, secondPos); + bb.maxX++; + bb.maxY++; + bb.maxZ++; + + PredicateTraceResult result = RaycastHelper.rayTraceUntil(player, 70, pos -> bb.isVecInside(pos)); + selectedFace = result.missed() ? null : result.getFacing(); } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/schematic/BlueprintHandler.java b/src/main/java/com/simibubi/create/schematic/BlueprintHandler.java index 89e163c85..0e9361cbf 100644 --- a/src/main/java/com/simibubi/create/schematic/BlueprintHandler.java +++ b/src/main/java/com/simibubi/create/schematic/BlueprintHandler.java @@ -9,11 +9,12 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.Create; import com.simibubi.create.gui.BlueprintHotbarOverlay; -import com.simibubi.create.gui.Keyboard; import com.simibubi.create.gui.ToolSelectionScreen; -import com.simibubi.create.item.ItemBlueprint; -import com.simibubi.create.networking.PacketNbt; -import com.simibubi.create.networking.Packets; +import com.simibubi.create.item.BlueprintItem; +import com.simibubi.create.networking.NbtPacket; +import com.simibubi.create.networking.AllPackets; +import com.simibubi.create.schematic.tools.Tools; +import com.simibubi.create.utility.Keyboard; import com.simibubi.create.utility.TessellatorHelper; import net.minecraft.client.Minecraft; @@ -36,6 +37,7 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.InputEvent.KeyInputEvent; import net.minecraftforge.client.event.InputEvent.MouseInputEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -169,11 +171,13 @@ public class BlueprintHandler { } @SubscribeEvent - public static void onRenderOverlay(RenderGameOverlayEvent event) { - if (instance.item != null) - instance.overlay.renderOn(instance.slot); + public static void onRenderOverlay(RenderGameOverlayEvent.Post event) { if (!instance.active) return; + if (event.getType() != ElementType.HOTBAR) + return; + if (instance.item != null) + instance.overlay.renderOn(instance.slot); instance.currentTool.getTool().renderOverlay(); instance.selectionScreen.renderPassive(event.getPartialTicks()); @@ -271,10 +275,10 @@ public class BlueprintHandler { public void sync() { Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent("Syncing..."), true); - Packets.channel.sendToServer(new PacketNbt(item, slot)); + AllPackets.channel.sendToServer(new NbtPacket(item, slot)); if (deployed) { - Template schematic = ItemBlueprint.getSchematic(item); + Template schematic = BlueprintItem.getSchematic(item); if (schematic.getSize().equals(BlockPos.ZERO)) return; diff --git a/src/main/java/com/simibubi/create/schematic/SchematicMoveVerticalTool.java b/src/main/java/com/simibubi/create/schematic/SchematicMoveVerticalTool.java deleted file mode 100644 index 2d130df42..000000000 --- a/src/main/java/com/simibubi/create/schematic/SchematicMoveVerticalTool.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.simibubi.create.schematic; - -public class SchematicMoveVerticalTool extends SchematicPlacementToolBase { - - @Override - public boolean handleMouseWheel(double delta) { - - if (blueprint.deployed) { - blueprint.moveTo(blueprint.anchor.add(0, delta, 0)); - return true; - } - - return super.handleMouseWheel(delta); - } - -} diff --git a/src/main/java/com/simibubi/create/schematic/Tools.java b/src/main/java/com/simibubi/create/schematic/Tools.java deleted file mode 100644 index 3defdc6e7..000000000 --- a/src/main/java/com/simibubi/create/schematic/Tools.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.simibubi.create.schematic; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import com.simibubi.create.gui.GuiResources; - -public enum Tools { - - Deploy(new SchematicDeployTool(), "Deploy", GuiResources.ICON_TOOL_DEPLOY), - - Move(new SchematicMoveTool(), "Move XZ", GuiResources.ICON_TOOL_MOVE_XZ), - MoveY(new SchematicMoveVerticalTool(), "Move Y", GuiResources.ICON_TOOL_MOVE_Y), - Rotate(new SchematicRotateTool(), "Rotate", GuiResources.ICON_TOOL_ROTATE), - Flip(new SchematicFlipTool(), "Flip", GuiResources.ICON_TOOL_MIRROR); - - private ISchematicTool tool; - private String displayName; - private GuiResources icon; - - private Tools(ISchematicTool tool, String name, GuiResources icon) { - this.tool = tool; - this.displayName = name; - this.icon = icon; - } - - public ISchematicTool getTool() { - return tool; - } - - public String getDisplayName() { - return displayName; - } - - public GuiResources getIcon() { - return icon; - } - - public static List getTools() { - List tools = new ArrayList<>(); - Collections.addAll(tools, Move, MoveY, Deploy, Rotate, Flip); - return tools; - } - -} diff --git a/src/main/java/com/simibubi/create/schematic/SchematicDeployTool.java b/src/main/java/com/simibubi/create/schematic/tools/DeployTool.java similarity index 91% rename from src/main/java/com/simibubi/create/schematic/SchematicDeployTool.java rename to src/main/java/com/simibubi/create/schematic/tools/DeployTool.java index cbc6d524c..5551d2b85 100644 --- a/src/main/java/com/simibubi/create/schematic/SchematicDeployTool.java +++ b/src/main/java/com/simibubi/create/schematic/tools/DeployTool.java @@ -1,16 +1,16 @@ -package com.simibubi.create.schematic; +package com.simibubi.create.schematic.tools; import org.lwjgl.glfw.GLFW; import com.mojang.blaze3d.platform.GlStateManager; -import com.simibubi.create.gui.Keyboard; +import com.simibubi.create.utility.Keyboard; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MutableBoundingBox; -public class SchematicDeployTool extends SchematicPlacementToolBase { +public class DeployTool extends PlacementToolBase { @Override public void init() { @@ -46,12 +46,12 @@ public class SchematicDeployTool extends SchematicPlacementToolBase { max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); } - GlStateManager.lineWidth(3); + GlStateManager.lineWidth(2); GlStateManager.color4f(.5f, .8f, 1, 1); GlStateManager.disableTexture(); WorldRenderer.drawBoundingBox(min.getX() - 1 / 8d, min.getY() + 1 / 16d, min.getZ() - 1 / 8d, - max.getX() + 1 / 8d, max.getY() + 1 / 8d, max.getZ() + 1 / 8d, 1, 1, 1, 1); + max.getX() + 1 / 8d, max.getY() + 1 / 8d, max.getZ() + 1 / 8d, .8f, .9f, 1, 1); GlStateManager.lineWidth(1); GlStateManager.enableTexture(); diff --git a/src/main/java/com/simibubi/create/schematic/SchematicFlipTool.java b/src/main/java/com/simibubi/create/schematic/tools/FlipTool.java similarity index 84% rename from src/main/java/com/simibubi/create/schematic/SchematicFlipTool.java rename to src/main/java/com/simibubi/create/schematic/tools/FlipTool.java index 9efda8a8d..c356e8997 100644 --- a/src/main/java/com/simibubi/create/schematic/SchematicFlipTool.java +++ b/src/main/java/com/simibubi/create/schematic/tools/FlipTool.java @@ -1,6 +1,6 @@ -package com.simibubi.create.schematic; +package com.simibubi.create.schematic.tools; -public class SchematicFlipTool extends SchematicPlacementToolBase { +public class FlipTool extends PlacementToolBase { @Override public void init() { diff --git a/src/main/java/com/simibubi/create/schematic/ISchematicTool.java b/src/main/java/com/simibubi/create/schematic/tools/ISchematicTool.java similarity index 84% rename from src/main/java/com/simibubi/create/schematic/ISchematicTool.java rename to src/main/java/com/simibubi/create/schematic/tools/ISchematicTool.java index b3b1ed19e..f86165630 100644 --- a/src/main/java/com/simibubi/create/schematic/ISchematicTool.java +++ b/src/main/java/com/simibubi/create/schematic/tools/ISchematicTool.java @@ -1,4 +1,4 @@ -package com.simibubi.create.schematic; +package com.simibubi.create.schematic.tools; public interface ISchematicTool { diff --git a/src/main/java/com/simibubi/create/schematic/SchematicMoveTool.java b/src/main/java/com/simibubi/create/schematic/tools/MoveTool.java similarity index 56% rename from src/main/java/com/simibubi/create/schematic/SchematicMoveTool.java rename to src/main/java/com/simibubi/create/schematic/tools/MoveTool.java index 916f8fedb..4744fe0c3 100644 --- a/src/main/java/com/simibubi/create/schematic/SchematicMoveTool.java +++ b/src/main/java/com/simibubi/create/schematic/tools/MoveTool.java @@ -1,6 +1,6 @@ -package com.simibubi.create.schematic; +package com.simibubi.create.schematic.tools; -public class SchematicMoveTool extends SchematicPlacementToolBase { +public class MoveTool extends PlacementToolBase { @Override public void init() { @@ -9,15 +9,22 @@ public class SchematicMoveTool extends SchematicPlacementToolBase { } @Override - public boolean handleMouseWheel(double delta) { + public void updateSelection() { + super.updateSelection(); + if (!schematicSelected) + return; + + renderSelectedFace = selectedFace.getAxis().isHorizontal(); + } + + @Override + public boolean handleMouseWheel(double delta) { if (schematicSelected && selectedFace.getAxis().isHorizontal()) { blueprint.moveTo(delta < 0 ? blueprint.anchor.add(selectedFace.getDirectionVec()) : blueprint.anchor.subtract(selectedFace.getDirectionVec())); - return true; } - - return super.handleMouseWheel(delta); + return true; } } diff --git a/src/main/java/com/simibubi/create/schematic/tools/MoveVerticalTool.java b/src/main/java/com/simibubi/create/schematic/tools/MoveVerticalTool.java new file mode 100644 index 000000000..1d0306259 --- /dev/null +++ b/src/main/java/com/simibubi/create/schematic/tools/MoveVerticalTool.java @@ -0,0 +1,13 @@ +package com.simibubi.create.schematic.tools; + +public class MoveVerticalTool extends PlacementToolBase { + + @Override + public boolean handleMouseWheel(double delta) { + if (blueprint.deployed) { + blueprint.moveTo(blueprint.anchor.add(0, delta, 0)); + } + return true; + } + +} diff --git a/src/main/java/com/simibubi/create/schematic/SchematicPlacementToolBase.java b/src/main/java/com/simibubi/create/schematic/tools/PlacementToolBase.java similarity index 78% rename from src/main/java/com/simibubi/create/schematic/SchematicPlacementToolBase.java rename to src/main/java/com/simibubi/create/schematic/tools/PlacementToolBase.java index 0d94227de..4a06abe21 100644 --- a/src/main/java/com/simibubi/create/schematic/SchematicPlacementToolBase.java +++ b/src/main/java/com/simibubi/create/schematic/tools/PlacementToolBase.java @@ -1,6 +1,6 @@ -package com.simibubi.create.schematic; +package com.simibubi.create.schematic.tools; -public abstract class SchematicPlacementToolBase extends SchematicToolBase { +public abstract class PlacementToolBase extends SchematicToolBase { @Override public void init() { diff --git a/src/main/java/com/simibubi/create/schematic/SchematicRotateTool.java b/src/main/java/com/simibubi/create/schematic/tools/RotateTool.java similarity index 65% rename from src/main/java/com/simibubi/create/schematic/SchematicRotateTool.java rename to src/main/java/com/simibubi/create/schematic/tools/RotateTool.java index 6f0f53cf3..72a1b5950 100644 --- a/src/main/java/com/simibubi/create/schematic/SchematicRotateTool.java +++ b/src/main/java/com/simibubi/create/schematic/tools/RotateTool.java @@ -1,8 +1,8 @@ -package com.simibubi.create.schematic; +package com.simibubi.create.schematic.tools; import net.minecraft.util.Rotation; -public class SchematicRotateTool extends SchematicPlacementToolBase { +public class RotateTool extends PlacementToolBase { @Override public boolean handleMouseWheel(double delta) { diff --git a/src/main/java/com/simibubi/create/schematic/SchematicToolBase.java b/src/main/java/com/simibubi/create/schematic/tools/SchematicToolBase.java similarity index 84% rename from src/main/java/com/simibubi/create/schematic/SchematicToolBase.java rename to src/main/java/com/simibubi/create/schematic/tools/SchematicToolBase.java index 74cbc5648..67783b314 100644 --- a/src/main/java/com/simibubi/create/schematic/SchematicToolBase.java +++ b/src/main/java/com/simibubi/create/schematic/tools/SchematicToolBase.java @@ -1,6 +1,10 @@ -package com.simibubi.create.schematic; +package com.simibubi.create.schematic.tools; + +import org.lwjgl.glfw.GLFW; import com.mojang.blaze3d.platform.GlStateManager; +import com.simibubi.create.schematic.BlueprintHandler; +import com.simibubi.create.utility.Keyboard; import com.simibubi.create.utility.RaycastHelper; import com.simibubi.create.utility.RaycastHelper.PredicateTraceResult; @@ -46,9 +50,10 @@ public abstract class SchematicToolBase implements ISchematicTool { // Select Blueprint if (blueprint.deployed) { + BlockPos min = blueprint.getTransformedAnchor(); + MutableBoundingBox bb = new MutableBoundingBox(min, min.add(blueprint.getTransformedSize())); PredicateTraceResult result = RaycastHelper.rayTraceUntil(player, 70, - pos -> new MutableBoundingBox(BlockPos.ZERO, blueprint.getTransformedSize()) - .isVecInside(pos.subtract(blueprint.anchor))); + pos -> bb.isVecInside(pos)); schematicSelected = !result.missed(); selectedFace = schematicSelected ? result.getFacing() : null; } @@ -80,7 +85,7 @@ public abstract class SchematicToolBase implements ISchematicTool { public void renderTool() { if (blueprint.deployed) { - GlStateManager.lineWidth(5); + GlStateManager.lineWidth(2); GlStateManager.color4f(1, 1, 1, 1); GlStateManager.disableTexture(); @@ -90,21 +95,21 @@ public abstract class SchematicToolBase implements ISchematicTool { BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); WorldRenderer.drawBoundingBox(min.getX() - 1 / 8d, min.getY() + 1 / 16d, min.getZ() - 1 / 8d, - max.getX() + 1 / 8d, max.getY() + 1 / 8d, max.getZ() + 1 / 8d, .3f, .4f, 1, 1); + max.getX() + 1 / 8d, max.getY() + 1 / 8d, max.getZ() + 1 / 8d, 1, 1, 1, 1); - if (schematicSelected && renderSelectedFace) { + if (schematicSelected && renderSelectedFace && Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL)) { Vec3d vec = new Vec3d(selectedFace.getDirectionVec()); Vec3d center = new Vec3d(min.add(max)).scale(1 / 2f); Vec3d radii = new Vec3d(max.subtract(min)).scale(1 / 2f); Vec3d onFaceOffset = new Vec3d(1 - Math.abs(vec.x), 1 - Math.abs(vec.y), 1 - Math.abs(vec.z)) .mul(radii); - Vec3d faceMin = center.add(vec.mul(radii).add(onFaceOffset)); - Vec3d faceMax = center.add(vec.mul(radii).subtract(onFaceOffset)); + Vec3d faceMin = center.add(vec.mul(radii).add(onFaceOffset)).add(vec.scale(1/8f)); + Vec3d faceMax = center.add(vec.mul(radii).subtract(onFaceOffset)).add(vec.scale(1/8f)); - GlStateManager.lineWidth(4); + GlStateManager.lineWidth(6); WorldRenderer.drawBoundingBox(faceMin.getX(), faceMin.getY() + 1 / 16d, faceMin.getZ(), faceMax.getX(), - faceMax.getY() + 1 / 8d, faceMax.getZ(), 1, 1, 1, 1); + faceMax.getY() + 1 / 8d, faceMax.getZ(), .6f, .7f, 1, 1); } GlStateManager.lineWidth(1); diff --git a/src/main/java/com/simibubi/create/schematic/tools/Tools.java b/src/main/java/com/simibubi/create/schematic/tools/Tools.java new file mode 100644 index 000000000..9b41898bc --- /dev/null +++ b/src/main/java/com/simibubi/create/schematic/tools/Tools.java @@ -0,0 +1,69 @@ +package com.simibubi.create.schematic.tools; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.google.common.collect.ImmutableList; +import com.simibubi.create.gui.ScreenResources; + +public enum Tools { + + Deploy(new DeployTool(), "Deploy", ScreenResources.ICON_TOOL_DEPLOY, ImmutableList.of( + "Moves the structure to a location.", + "Right-Click on the ground to place.", + "Hold [Ctrl] to select at a fixed distance.", + "[Ctrl]-Scroll to change the distance." + )), + Move(new MoveTool(), "Move XZ", ScreenResources.ICON_TOOL_MOVE_XZ, ImmutableList.of( + "Shifts the Schematic Horizontally", + "Point at the Schematic and [CTRL]-Scroll to push it." + )), + MoveY(new MoveVerticalTool(), "Move Y", ScreenResources.ICON_TOOL_MOVE_Y, ImmutableList.of( + "Shifts the Schematic Vertically", + "[CTRL]-Scroll to move it up/down" + )), + Rotate(new RotateTool(), "Rotate", ScreenResources.ICON_TOOL_ROTATE, ImmutableList.of( + "Rotates the Schematic around its center.", + "[CTRL]-Scroll to rotate by 90 Degrees" + )), + Flip(new FlipTool(), "Flip", ScreenResources.ICON_TOOL_MIRROR, ImmutableList.of( + "Flips the Schematic along the face you select.", + "Point at the Schematic and [CTRL]-Scroll to flip it." + )); + + private ISchematicTool tool; + private String displayName; + private ScreenResources icon; + private List description; + + private Tools(ISchematicTool tool, String name, ScreenResources icon, List description) { + this.tool = tool; + this.displayName = name; + this.icon = icon; + this.description = description; + } + + public ISchematicTool getTool() { + return tool; + } + + public String getDisplayName() { + return displayName; + } + + public ScreenResources getIcon() { + return icon; + } + + public static List getTools() { + List tools = new ArrayList<>(); + Collections.addAll(tools, Move, MoveY, Deploy, Rotate, Flip); + return tools; + } + + public List getDescription() { + return description; + } + +} diff --git a/src/main/java/com/simibubi/create/block/IJustForRendering.java b/src/main/java/com/simibubi/create/utility/IJustForRendering.java similarity index 52% rename from src/main/java/com/simibubi/create/block/IJustForRendering.java rename to src/main/java/com/simibubi/create/utility/IJustForRendering.java index 580ab5fde..7039ee357 100644 --- a/src/main/java/com/simibubi/create/block/IJustForRendering.java +++ b/src/main/java/com/simibubi/create/utility/IJustForRendering.java @@ -1,4 +1,4 @@ -package com.simibubi.create.block; +package com.simibubi.create.utility; public interface IJustForRendering { diff --git a/src/main/java/com/simibubi/create/gui/Keyboard.java b/src/main/java/com/simibubi/create/utility/Keyboard.java similarity index 95% rename from src/main/java/com/simibubi/create/gui/Keyboard.java rename to src/main/java/com/simibubi/create/utility/Keyboard.java index ada30d0a7..3c0e12935 100644 --- a/src/main/java/com/simibubi/create/gui/Keyboard.java +++ b/src/main/java/com/simibubi/create/utility/Keyboard.java @@ -1,4 +1,4 @@ -package com.simibubi.create.gui; +package com.simibubi.create.utility; import org.lwjgl.glfw.GLFW; diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index a90935318..663474da3 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -14,7 +14,7 @@ loaderVersion="[26,)" #mandatory (26 is current forge version) # The modid of the mod modId="create" #mandatory # The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -version="0.0.1" #mandatory +version="0.0.2" #mandatory # A display name for the mod displayName="Create" #mandatory # A URL to query for updates for this mod. See the JSON update specification diff --git a/src/main/resources/assets/create/textures/block/marker/inner_selected.png b/src/main/resources/assets/create/textures/block/marker/inner_selected.png index ef26fa1e4..7d5539cc7 100644 Binary files a/src/main/resources/assets/create/textures/block/marker/inner_selected.png and b/src/main/resources/assets/create/textures/block/marker/inner_selected.png differ