mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-01-23 11:28:10 +01:00
Fix, Refactor and Polish
- Tidied up and renamed Classes - Added useful tooltips to all items - Added tooltips to blueprint overlay tools - Made Schematic And Quill more bearable to use - Changed rendering order for blueprint overlay, Fixes Issue #1
This commit is contained in:
parent
f0b9c30ef5
commit
dbfb60b809
62 changed files with 794 additions and 465 deletions
|
@ -13,7 +13,7 @@ apply plugin: 'net.minecraftforge.gradle'
|
||||||
apply plugin: 'eclipse'
|
apply plugin: 'eclipse'
|
||||||
apply plugin: 'maven-publish'
|
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
|
group = 'com.simibubi.create' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = 'create'
|
archivesBaseName = 'create'
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package com.simibubi.create;
|
package com.simibubi.create;
|
||||||
|
|
||||||
import com.simibubi.create.block.CreativeCrateBlock;
|
import com.simibubi.create.block.CreativeCrateBlock;
|
||||||
import com.simibubi.create.block.IJustForRendering;
|
|
||||||
import com.simibubi.create.block.RenderingBlock;
|
import com.simibubi.create.block.RenderingBlock;
|
||||||
import com.simibubi.create.block.SchematicTableBlock;
|
import com.simibubi.create.block.SchematicTableBlock;
|
||||||
import com.simibubi.create.block.SchematicannonBlock;
|
import com.simibubi.create.block.SchematicannonBlock;
|
||||||
import com.simibubi.create.block.symmetry.BlockSymmetryCrossPlane;
|
import com.simibubi.create.block.symmetry.CrossPlaneSymmetryBlock;
|
||||||
import com.simibubi.create.block.symmetry.BlockSymmetryPlane;
|
import com.simibubi.create.block.symmetry.PlaneSymmetryBlock;
|
||||||
import com.simibubi.create.block.symmetry.BlockSymmetryTriplePlane;
|
import com.simibubi.create.block.symmetry.TriplePlaneSymmetryBlock;
|
||||||
|
import com.simibubi.create.utility.IJustForRendering;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -24,9 +24,9 @@ public enum AllBlocks {
|
||||||
|
|
||||||
SCHEMATIC_TABLE(new SchematicTableBlock()),
|
SCHEMATIC_TABLE(new SchematicTableBlock()),
|
||||||
|
|
||||||
SYMMETRY_PLANE(new BlockSymmetryPlane()),
|
SYMMETRY_PLANE(new PlaneSymmetryBlock()),
|
||||||
SYMMETRY_CROSSPLANE(new BlockSymmetryCrossPlane()),
|
SYMMETRY_CROSSPLANE(new CrossPlaneSymmetryBlock()),
|
||||||
SYMMETRY_TRIPLEPLANE(new BlockSymmetryTriplePlane());
|
SYMMETRY_TRIPLEPLANE(new TriplePlaneSymmetryBlock());
|
||||||
|
|
||||||
public Block block;
|
public Block block;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package com.simibubi.create;
|
package com.simibubi.create;
|
||||||
|
|
||||||
import com.simibubi.create.item.ItemBlueprint;
|
import com.simibubi.create.item.BlueprintItem;
|
||||||
import com.simibubi.create.item.ItemBlueprintAndQuill;
|
import com.simibubi.create.item.BlueprintAndQuillItem;
|
||||||
import com.simibubi.create.item.ItemTreeFertilizer;
|
import com.simibubi.create.item.TreeFertilizerItem;
|
||||||
import com.simibubi.create.item.ItemWandSymmetry;
|
import com.simibubi.create.item.SymmetryWandItem;
|
||||||
|
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.Item.Properties;
|
import net.minecraft.item.Item.Properties;
|
||||||
|
@ -14,11 +14,11 @@ import net.minecraftforge.registries.IForgeRegistry;
|
||||||
|
|
||||||
public enum AllItems {
|
public enum AllItems {
|
||||||
|
|
||||||
TREE_FERTILIZER(new ItemTreeFertilizer(standardProperties())),
|
TREE_FERTILIZER(new TreeFertilizerItem(standardProperties())),
|
||||||
SYMMETRY_WAND(new ItemWandSymmetry(standardProperties())),
|
SYMMETRY_WAND(new SymmetryWandItem(standardProperties())),
|
||||||
EMPTY_BLUEPRINT(new Item(standardProperties().maxStackSize(1))),
|
EMPTY_BLUEPRINT(new Item(standardProperties().maxStackSize(1))),
|
||||||
BLUEPRINT_AND_QUILL(new ItemBlueprintAndQuill(standardProperties().maxStackSize(1))),
|
BLUEPRINT_AND_QUILL(new BlueprintAndQuillItem(standardProperties().maxStackSize(1))),
|
||||||
BLUEPRINT(new ItemBlueprint(standardProperties()));
|
BLUEPRINT(new BlueprintItem(standardProperties()));
|
||||||
|
|
||||||
public Item item;
|
public Item item;
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@ import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.simibubi.create.networking.PacketSchematicUpload;
|
import com.simibubi.create.networking.SchematicUploadPacket;
|
||||||
import com.simibubi.create.networking.Packets;
|
import com.simibubi.create.networking.AllPackets;
|
||||||
import com.simibubi.create.utility.FilesHelper;
|
import com.simibubi.create.utility.FilesHelper;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -76,7 +76,7 @@ public class ClientSchematicLoader {
|
||||||
|
|
||||||
in = Files.newInputStream(path, StandardOpenOption.READ);
|
in = Files.newInputStream(path, StandardOpenOption.READ);
|
||||||
activeUploads.put(schematic, in);
|
activeUploads.put(schematic, in);
|
||||||
Packets.channel.sendToServer(PacketSchematicUpload.begin(schematic, size));
|
AllPackets.channel.sendToServer(SchematicUploadPacket.begin(schematic, size));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ public class ClientSchematicLoader {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Minecraft.getInstance().world != null)
|
if (Minecraft.getInstance().world != null)
|
||||||
Packets.channel.sendToServer(PacketSchematicUpload.write(schematic, data));
|
AllPackets.channel.sendToServer(SchematicUploadPacket.write(schematic, data));
|
||||||
else {
|
else {
|
||||||
activeUploads.remove(schematic);
|
activeUploads.remove(schematic);
|
||||||
return;
|
return;
|
||||||
|
@ -108,7 +108,7 @@ public class ClientSchematicLoader {
|
||||||
|
|
||||||
private void finishUpload(String schematic) {
|
private void finishUpload(String schematic) {
|
||||||
if (activeUploads.containsKey(schematic)) {
|
if (activeUploads.containsKey(schematic)) {
|
||||||
Packets.channel.sendToServer(PacketSchematicUpload.finish(schematic));
|
AllPackets.channel.sendToServer(SchematicUploadPacket.finish(schematic));
|
||||||
activeUploads.remove(schematic);
|
activeUploads.remove(schematic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,10 @@ package com.simibubi.create;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import com.simibubi.create.gui.Keyboard;
|
import com.simibubi.create.networking.AllPackets;
|
||||||
import com.simibubi.create.networking.Packets;
|
|
||||||
import com.simibubi.create.schematic.BlueprintHandler;
|
import com.simibubi.create.schematic.BlueprintHandler;
|
||||||
import com.simibubi.create.schematic.SchematicHologram;
|
import com.simibubi.create.schematic.SchematicHologram;
|
||||||
|
import com.simibubi.create.utility.Keyboard;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.client.settings.KeyBinding;
|
import net.minecraft.client.settings.KeyBinding;
|
||||||
|
@ -35,7 +35,7 @@ public class Create {
|
||||||
|
|
||||||
public static final String ID = "create";
|
public static final String ID = "create";
|
||||||
public static final String NAME = "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();
|
public static Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ public class Create {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(final FMLCommonSetupEvent event) {
|
private void init(final FMLCommonSetupEvent event) {
|
||||||
Packets.registerPackets();
|
AllPackets.registerPackets();
|
||||||
DistExecutor.runWhenOn(Dist.CLIENT, () -> AllContainers::registerScreenFactories);
|
DistExecutor.runWhenOn(Dist.CLIENT, () -> AllContainers::registerScreenFactories);
|
||||||
sSchematicLoader = new ServerSchematicLoader();
|
sSchematicLoader = new ServerSchematicLoader();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,8 @@ import java.util.Set;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import com.simibubi.create.block.SchematicTableTileEntity;
|
import com.simibubi.create.block.SchematicTableTileEntity;
|
||||||
import com.simibubi.create.item.ItemBlueprint;
|
import com.simibubi.create.item.BlueprintItem;
|
||||||
import com.simibubi.create.networking.PacketSchematicUpload.DimensionPos;
|
import com.simibubi.create.networking.SchematicUploadPacket.DimensionPos;
|
||||||
import com.simibubi.create.utility.FilesHelper;
|
import com.simibubi.create.utility.FilesHelper;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -224,7 +224,7 @@ public class ServerSchematicLoader {
|
||||||
tileEntity.finishUpload();
|
tileEntity.finishUpload();
|
||||||
tileEntity.inventory.setStackInSlot(0, ItemStack.EMPTY);
|
tileEntity.inventory.setStackInSlot(0, ItemStack.EMPTY);
|
||||||
tileEntity.inventory.setStackInSlot(1,
|
tileEntity.inventory.setStackInSlot(1,
|
||||||
ItemBlueprint.create(schematic, player.getName().getFormattedText()));
|
BlueprintItem.create(schematic, player.getName().getFormattedText()));
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Create.logger.error("Exception Thrown when finishing Upload: " + playerSchematicId);
|
Create.logger.error("Exception Thrown when finishing Upload: " + playerSchematicId);
|
||||||
|
|
|
@ -1,12 +1,23 @@
|
||||||
package com.simibubi.create.block;
|
package com.simibubi.create.block;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.utility.Keyboard;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.material.Material;
|
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.BlockPos;
|
||||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
import net.minecraft.util.math.shapes.VoxelShape;
|
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.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
public class CreativeCrateBlock extends Block {
|
public class CreativeCrateBlock extends Block {
|
||||||
|
|
||||||
|
@ -21,6 +32,19 @@ public class CreativeCrateBlock extends Block {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> 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
|
@Override
|
||||||
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||||
return shape;
|
return shape;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package com.simibubi.create.block;
|
package com.simibubi.create.block;
|
||||||
|
|
||||||
|
import com.simibubi.create.utility.IJustForRendering;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,31 @@
|
||||||
package com.simibubi.create.block;
|
package com.simibubi.create.block;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.utility.Keyboard;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.HorizontalBlock;
|
import net.minecraft.block.HorizontalBlock;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.inventory.InventoryHelper;
|
import net.minecraft.inventory.InventoryHelper;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.state.StateContainer.Builder;
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.BlockRayTraceResult;
|
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.IBlockReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.fml.network.NetworkHooks;
|
import net.minecraftforge.fml.network.NetworkHooks;
|
||||||
|
|
||||||
public class SchematicTableBlock extends HorizontalBlock {
|
public class SchematicTableBlock extends HorizontalBlock {
|
||||||
|
@ -33,6 +44,18 @@ public class SchematicTableBlock extends HorizontalBlock {
|
||||||
public boolean isSolid(BlockState state) {
|
public boolean isSolid(BlockState state) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> 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
|
@Override
|
||||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
package com.simibubi.create.block;
|
package com.simibubi.create.block;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
|
import com.simibubi.create.utility.Keyboard;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.inventory.InventoryHelper;
|
import net.minecraft.inventory.InventoryHelper;
|
||||||
|
@ -14,10 +18,15 @@ import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.BlockRayTraceResult;
|
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.IBlockReader;
|
||||||
import net.minecraft.world.IWorld;
|
import net.minecraft.world.IWorld;
|
||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.fml.network.NetworkHooks;
|
import net.minecraftforge.fml.network.NetworkHooks;
|
||||||
|
|
||||||
public class SchematicannonBlock extends Block {
|
public class SchematicannonBlock extends Block {
|
||||||
|
@ -36,6 +45,19 @@ public class SchematicannonBlock extends Block {
|
||||||
return new SchematicannonTileEntity();
|
return new SchematicannonTileEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> 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
|
@Override
|
||||||
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn,
|
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn,
|
||||||
BlockPos currentPos, BlockPos facingPos) {
|
BlockPos currentPos, BlockPos facingPos) {
|
||||||
|
|
|
@ -7,7 +7,7 @@ import java.util.List;
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.AllTileEntities;
|
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.Cuboid;
|
||||||
import com.simibubi.create.schematic.MaterialChecklist;
|
import com.simibubi.create.schematic.MaterialChecklist;
|
||||||
import com.simibubi.create.schematic.SchematicWorld;
|
import com.simibubi.create.schematic.SchematicWorld;
|
||||||
|
@ -495,7 +495,7 @@ public class SchematicannonTileEntity extends TileEntitySynced implements ITicka
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load blocks into reader
|
// Load blocks into reader
|
||||||
Template activeTemplate = ItemBlueprint.getSchematic(blueprint);
|
Template activeTemplate = BlueprintItem.getSchematic(blueprint);
|
||||||
BlockPos anchor = NBTUtil.readBlockPos(blueprint.getTag().getCompound("Anchor"));
|
BlockPos anchor = NBTUtil.readBlockPos(blueprint.getTag().getCompound("Anchor"));
|
||||||
|
|
||||||
if (activeTemplate.getSize().equals(BlockPos.ZERO)) {
|
if (activeTemplate.getSize().equals(BlockPos.ZERO)) {
|
||||||
|
@ -514,7 +514,7 @@ public class SchematicannonTileEntity extends TileEntitySynced implements ITicka
|
||||||
|
|
||||||
schematicAnchor = anchor;
|
schematicAnchor = anchor;
|
||||||
blockReader = new SchematicWorld(new HashMap<>(), new Cuboid(), schematicAnchor);
|
blockReader = new SchematicWorld(new HashMap<>(), new Cuboid(), schematicAnchor);
|
||||||
activeTemplate.addBlocksToWorld(blockReader, schematicAnchor, ItemBlueprint.getSettings(blueprint));
|
activeTemplate.addBlocksToWorld(blockReader, schematicAnchor, BlueprintItem.getSettings(blueprint));
|
||||||
schematicLoaded = true;
|
schematicLoaded = true;
|
||||||
state = State.PAUSED;
|
state = State.PAUSED;
|
||||||
statusMsg = "Ready";
|
statusMsg = "Ready";
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -8,12 +8,12 @@ import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.state.EnumProperty;
|
import net.minecraft.state.EnumProperty;
|
||||||
import net.minecraft.state.StateContainer.Builder;
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
|
|
||||||
public class BlockSymmetryCrossPlane extends BlockSymmetry {
|
public class CrossPlaneSymmetryBlock extends SymmetryBlock {
|
||||||
|
|
||||||
public static final EnumProperty<SymmetryCrossPlane.Align> align = EnumProperty.create("align",
|
public static final EnumProperty<SymmetryCrossPlane.Align> align = EnumProperty.create("align",
|
||||||
SymmetryCrossPlane.Align.class);
|
SymmetryCrossPlane.Align.class);
|
||||||
|
|
||||||
public BlockSymmetryCrossPlane() {
|
public CrossPlaneSymmetryBlock() {
|
||||||
super(Properties.create(Material.AIR));
|
super(Properties.create(Material.AIR));
|
||||||
this.setDefaultState(getDefaultState().with(align, SymmetryCrossPlane.Align.Y));
|
this.setDefaultState(getDefaultState().with(align, SymmetryCrossPlane.Align.Y));
|
||||||
}
|
}
|
|
@ -8,11 +8,11 @@ import net.minecraft.block.material.Material;
|
||||||
import net.minecraft.state.EnumProperty;
|
import net.minecraft.state.EnumProperty;
|
||||||
import net.minecraft.state.StateContainer.Builder;
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
|
|
||||||
public class BlockSymmetryPlane extends BlockSymmetry {
|
public class PlaneSymmetryBlock extends SymmetryBlock {
|
||||||
|
|
||||||
public static final EnumProperty<SymmetryPlane.Align> align = EnumProperty.create("align", SymmetryPlane.Align.class);
|
public static final EnumProperty<SymmetryPlane.Align> align = EnumProperty.create("align", SymmetryPlane.Align.class);
|
||||||
|
|
||||||
public BlockSymmetryPlane() {
|
public PlaneSymmetryBlock() {
|
||||||
super(Properties.create(Material.AIR));
|
super(Properties.create(Material.AIR));
|
||||||
this.setDefaultState(getDefaultState().with(align, SymmetryPlane.Align.XY));
|
this.setDefaultState(getDefaultState().with(align, SymmetryPlane.Align.XY));
|
||||||
}
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,9 +2,9 @@ package com.simibubi.create.block.symmetry;
|
||||||
|
|
||||||
import net.minecraft.block.material.Material;
|
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));
|
super(Properties.create(Material.AIR));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@ import java.util.List;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.gui.widgets.DynamicLabel;
|
import com.simibubi.create.gui.widgets.Label;
|
||||||
import com.simibubi.create.gui.widgets.OptionScrollArea;
|
import com.simibubi.create.gui.widgets.SelectionScrollInput;
|
||||||
import com.simibubi.create.gui.widgets.ScrollArea;
|
import com.simibubi.create.gui.widgets.ScrollInput;
|
||||||
import com.simibubi.create.schematic.BlueprintHandler;
|
import com.simibubi.create.schematic.BlueprintHandler;
|
||||||
|
|
||||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||||
|
@ -27,12 +27,12 @@ public class BlueprintEditScreen extends AbstractSimiScreen {
|
||||||
"Clockwise 270");
|
"Clockwise 270");
|
||||||
private static final List<String> mirrorOptions = ImmutableList.of("None", "Left-Right", "Front-Back");
|
private static final List<String> mirrorOptions = ImmutableList.of("None", "Left-Right", "Front-Back");
|
||||||
|
|
||||||
private ScrollArea rotationArea;
|
private ScrollInput rotationArea;
|
||||||
private ScrollArea mirrorArea;
|
private ScrollInput mirrorArea;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
setWindowSize(GuiResources.SCHEMATIC.width + 50, GuiResources.SCHEMATIC.height);
|
setWindowSize(ScreenResources.SCHEMATIC.width + 50, ScreenResources.SCHEMATIC.height);
|
||||||
int x = topLeftX;
|
int x = topLeftX;
|
||||||
int y = topLeftY;
|
int y = topLeftY;
|
||||||
BlueprintHandler bh = BlueprintHandler.instance;
|
BlueprintHandler bh = BlueprintHandler.instance;
|
||||||
|
@ -70,12 +70,12 @@ public class BlueprintEditScreen extends AbstractSimiScreen {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicLabel labelR = new DynamicLabel(x + 99, y + 52, "").withShadow();
|
Label labelR = new Label(x + 99, y + 52, "").withShadow();
|
||||||
rotationArea = new OptionScrollArea(x + 96, y + 49, 94, 14).forOptions(rotationOptions).titled("Rotation")
|
rotationArea = new SelectionScrollInput(x + 96, y + 49, 94, 14).forOptions(rotationOptions).titled("Rotation")
|
||||||
.setState(bh.cachedSettings.getRotation().ordinal()).writingTo(labelR);
|
.setState(bh.cachedSettings.getRotation().ordinal()).writingTo(labelR);
|
||||||
|
|
||||||
DynamicLabel labelM = new DynamicLabel(x + 99, y + 72, "").withShadow();
|
Label labelM = new Label(x + 99, y + 72, "").withShadow();
|
||||||
mirrorArea = new OptionScrollArea(x + 96, y + 69, 94, 14).forOptions(mirrorOptions).titled("Mirror")
|
mirrorArea = new SelectionScrollInput(x + 96, y + 69, 94, 14).forOptions(mirrorOptions).titled("Mirror")
|
||||||
.setState(bh.cachedSettings.getMirror().ordinal()).writingTo(labelM);
|
.setState(bh.cachedSettings.getMirror().ordinal()).writingTo(labelM);
|
||||||
|
|
||||||
Collections.addAll(widgets, xInput, yInput, zInput);
|
Collections.addAll(widgets, xInput, yInput, zInput);
|
||||||
|
@ -118,15 +118,15 @@ public class BlueprintEditScreen extends AbstractSimiScreen {
|
||||||
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||||
int x = topLeftX;
|
int x = topLeftX;
|
||||||
int y = topLeftY;
|
int y = topLeftY;
|
||||||
GuiResources.SCHEMATIC.draw(this, x, y);
|
ScreenResources.SCHEMATIC.draw(this, x, y);
|
||||||
BlueprintHandler bh = BlueprintHandler.instance;
|
BlueprintHandler bh = BlueprintHandler.instance;
|
||||||
|
|
||||||
font.drawStringWithShadow(bh.cachedSchematicName, x + 103 - font.getStringWidth(bh.cachedSchematicName) / 2,
|
font.drawStringWithShadow(bh.cachedSchematicName, x + 103 - font.getStringWidth(bh.cachedSchematicName) / 2,
|
||||||
y + 10, 0xDDEEFF);
|
y + 10, 0xDDEEFF);
|
||||||
|
|
||||||
font.drawString("Position", x + 10, y + 32, GuiResources.FONT_COLOR);
|
font.drawString("Position", x + 10, y + 32, ScreenResources.FONT_COLOR);
|
||||||
font.drawString("Rotation", x + 10, y + 52, GuiResources.FONT_COLOR);
|
font.drawString("Rotation", x + 10, y + 52, ScreenResources.FONT_COLOR);
|
||||||
font.drawString("Mirror", x + 10, y + 72, GuiResources.FONT_COLOR);
|
font.drawString("Mirror", x + 10, y + 72, ScreenResources.FONT_COLOR);
|
||||||
|
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
GlStateManager.translated(topLeftX + 220, topLeftY + 20, 0);
|
GlStateManager.translated(topLeftX + 220, topLeftY + 20, 0);
|
||||||
|
|
|
@ -13,7 +13,7 @@ public class BlueprintHotbarOverlay extends AbstractGui {
|
||||||
int x = mainWindow.getScaledWidth() / 2 - 92;
|
int x = mainWindow.getScaledWidth() / 2 - 92;
|
||||||
int y = mainWindow.getScaledHeight() - 23;
|
int y = mainWindow.getScaledHeight() - 23;
|
||||||
GlStateManager.enableAlphaTest();
|
GlStateManager.enableAlphaTest();
|
||||||
GuiResources.BLUEPRINT_SLOT.draw(this, x + 20 * slot, y);
|
ScreenResources.BLUEPRINT_SLOT.draw(this, x + 20 * slot, y);
|
||||||
GlStateManager.disableAlphaTest();
|
GlStateManager.disableAlphaTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,10 +7,10 @@ import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.block.SchematicTableContainer;
|
import com.simibubi.create.block.SchematicTableContainer;
|
||||||
import com.simibubi.create.gui.widgets.DynamicLabel;
|
import com.simibubi.create.gui.widgets.Label;
|
||||||
import com.simibubi.create.gui.widgets.OptionScrollArea;
|
import com.simibubi.create.gui.widgets.SelectionScrollInput;
|
||||||
import com.simibubi.create.gui.widgets.ScrollArea;
|
import com.simibubi.create.gui.widgets.ScrollInput;
|
||||||
import com.simibubi.create.gui.widgets.SimiButton;
|
import com.simibubi.create.gui.widgets.IconButton;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.IHasContainer;
|
import net.minecraft.client.gui.IHasContainer;
|
||||||
|
@ -24,11 +24,11 @@ import net.minecraft.util.text.ITextComponent;
|
||||||
public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicTableContainer>
|
public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicTableContainer>
|
||||||
implements IHasContainer<SchematicTableContainer> {
|
implements IHasContainer<SchematicTableContainer> {
|
||||||
|
|
||||||
private ScrollArea schematicsArea;
|
private ScrollInput schematicsArea;
|
||||||
private SimiButton confirmButton;
|
private IconButton confirmButton;
|
||||||
private SimiButton folderButton;
|
private IconButton folderButton;
|
||||||
private SimiButton refreshButton;
|
private IconButton refreshButton;
|
||||||
private DynamicLabel schematicsLabel;
|
private Label schematicsLabel;
|
||||||
|
|
||||||
private float progress;
|
private float progress;
|
||||||
private float chasingProgress;
|
private float chasingProgress;
|
||||||
|
@ -41,7 +41,7 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicT
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
setWindowSize(GuiResources.SCHEMATIC_TABLE.width, GuiResources.SCHEMATIC_TABLE.height + 50);
|
setWindowSize(ScreenResources.SCHEMATIC_TABLE.width, ScreenResources.SCHEMATIC_TABLE.height + 50);
|
||||||
super.init();
|
super.init();
|
||||||
widgets.clear();
|
widgets.clear();
|
||||||
|
|
||||||
|
@ -52,16 +52,16 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicT
|
||||||
List<String> availableSchematics = Create.cSchematicLoader.getAvailableSchematics();
|
List<String> availableSchematics = Create.cSchematicLoader.getAvailableSchematics();
|
||||||
|
|
||||||
if (!availableSchematics.isEmpty()) {
|
if (!availableSchematics.isEmpty()) {
|
||||||
schematicsLabel = new DynamicLabel(mainLeft + 36, mainTop + 26, "").withShadow();
|
schematicsLabel = new Label(mainLeft + 36, mainTop + 26, "").withShadow();
|
||||||
schematicsArea = new OptionScrollArea(mainLeft + 33, mainTop + 23, 134, 14).forOptions(availableSchematics)
|
schematicsArea = new SelectionScrollInput(mainLeft + 33, mainTop + 23, 134, 14).forOptions(availableSchematics)
|
||||||
.titled("Available Schematics").writingTo(schematicsLabel);
|
.titled("Available Schematics").writingTo(schematicsLabel);
|
||||||
widgets.add(schematicsArea);
|
widgets.add(schematicsArea);
|
||||||
widgets.add(schematicsLabel);
|
widgets.add(schematicsLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
confirmButton = new SimiButton(mainLeft + 69, mainTop + 55, GuiResources.ICON_CONFIRM);
|
confirmButton = new IconButton(mainLeft + 69, mainTop + 55, ScreenResources.ICON_CONFIRM);
|
||||||
folderButton = new SimiButton(mainLeft + 204, mainTop + 6, GuiResources.ICON_OPEN_FOLDER);
|
folderButton = new IconButton(mainLeft + 204, mainTop + 6, ScreenResources.ICON_OPEN_FOLDER);
|
||||||
refreshButton = new SimiButton(mainLeft + 204, mainTop + 26, GuiResources.ICON_REFRESH);
|
refreshButton = new IconButton(mainLeft + 204, mainTop + 26, ScreenResources.ICON_REFRESH);
|
||||||
widgets.add(confirmButton);
|
widgets.add(confirmButton);
|
||||||
widgets.add(folderButton);
|
widgets.add(folderButton);
|
||||||
widgets.add(refreshButton);
|
widgets.add(refreshButton);
|
||||||
|
@ -83,28 +83,28 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicT
|
||||||
int mainLeft = guiLeft - 56;
|
int mainLeft = guiLeft - 56;
|
||||||
int mainTop = guiTop - 16;
|
int mainTop = guiTop - 16;
|
||||||
|
|
||||||
GuiResources.PLAYER_INVENTORY.draw(this, x- 16, y + 70 + 14);
|
ScreenResources.PLAYER_INVENTORY.draw(this, x- 16, y + 70 + 14);
|
||||||
font.drawString("Inventory", x - 15 + 7, y + 64 + 26, 0x666666);
|
font.drawString("Inventory", x - 15 + 7, y + 64 + 26, 0x666666);
|
||||||
|
|
||||||
GuiResources.SCHEMATIC_TABLE.draw(this, mainLeft, mainTop);
|
ScreenResources.SCHEMATIC_TABLE.draw(this, mainLeft, mainTop);
|
||||||
if (container.getTileEntity().isUploading)
|
if (container.getTileEntity().isUploading)
|
||||||
font.drawString("Uploading...", mainLeft + 76, mainTop + 10, GuiResources.FONT_COLOR);
|
font.drawString("Uploading...", mainLeft + 76, mainTop + 10, ScreenResources.FONT_COLOR);
|
||||||
else if (container.getSlot(1).getHasStack())
|
else if (container.getSlot(1).getHasStack())
|
||||||
font.drawString("Upload Finished!", mainLeft + 60, mainTop + 10, GuiResources.FONT_COLOR);
|
font.drawString("Upload Finished!", mainLeft + 60, mainTop + 10, ScreenResources.FONT_COLOR);
|
||||||
else
|
else
|
||||||
font.drawString("Schematic Table", mainLeft + 60, mainTop + 10, GuiResources.FONT_COLOR);
|
font.drawString("Schematic Table", mainLeft + 60, mainTop + 10, ScreenResources.FONT_COLOR);
|
||||||
|
|
||||||
if (schematicsArea == null) {
|
if (schematicsArea == null) {
|
||||||
font.drawStringWithShadow(" No Schematics Saved ", mainLeft + 39, mainTop + 26, 0xFFDD44);
|
font.drawStringWithShadow(" No Schematics Saved ", mainLeft + 39, mainTop + 26, 0xFFDD44);
|
||||||
}
|
}
|
||||||
|
|
||||||
minecraft.getTextureManager().bindTexture(GuiResources.SCHEMATIC_TABLE_PROGRESS.location);
|
minecraft.getTextureManager().bindTexture(ScreenResources.SCHEMATIC_TABLE_PROGRESS.location);
|
||||||
int width = (int) (GuiResources.SCHEMATIC_TABLE_PROGRESS.width
|
int width = (int) (ScreenResources.SCHEMATIC_TABLE_PROGRESS.width
|
||||||
* MathHelper.lerp(partialTicks, lastChasingProgress, chasingProgress));
|
* MathHelper.lerp(partialTicks, lastChasingProgress, chasingProgress));
|
||||||
int height = GuiResources.SCHEMATIC_TABLE_PROGRESS.height;
|
int height = ScreenResources.SCHEMATIC_TABLE_PROGRESS.height;
|
||||||
GlStateManager.disableLighting();
|
GlStateManager.disableLighting();
|
||||||
blit(mainLeft + 94, mainTop + 56, GuiResources.SCHEMATIC_TABLE_PROGRESS.startX,
|
blit(mainLeft + 94, mainTop + 56, ScreenResources.SCHEMATIC_TABLE_PROGRESS.startX,
|
||||||
GuiResources.SCHEMATIC_TABLE_PROGRESS.startY, width, height);
|
ScreenResources.SCHEMATIC_TABLE_PROGRESS.startY, width, height);
|
||||||
|
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen<SchematicT
|
||||||
Create.cSchematicLoader.refresh();
|
Create.cSchematicLoader.refresh();
|
||||||
List<String> availableSchematics = Create.cSchematicLoader.getAvailableSchematics();
|
List<String> availableSchematics = Create.cSchematicLoader.getAvailableSchematics();
|
||||||
widgets.remove(schematicsArea);
|
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);
|
.titled("Available Schematics").writingTo(schematicsLabel);
|
||||||
widgets.add(schematicsArea);
|
widgets.add(schematicsArea);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,12 +9,12 @@ import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.block.SchematicannonContainer;
|
import com.simibubi.create.block.SchematicannonContainer;
|
||||||
import com.simibubi.create.block.SchematicannonTileEntity;
|
import com.simibubi.create.block.SchematicannonTileEntity;
|
||||||
import com.simibubi.create.gui.widgets.GuiIndicator;
|
import com.simibubi.create.gui.widgets.Indicator;
|
||||||
import com.simibubi.create.gui.widgets.GuiIndicator.State;
|
import com.simibubi.create.gui.widgets.Indicator.State;
|
||||||
import com.simibubi.create.gui.widgets.SimiButton;
|
import com.simibubi.create.gui.widgets.IconButton;
|
||||||
import com.simibubi.create.networking.PacketConfigureSchematicannon;
|
import com.simibubi.create.networking.ConfigureSchematicannonPacket;
|
||||||
import com.simibubi.create.networking.PacketConfigureSchematicannon.Option;
|
import com.simibubi.create.networking.ConfigureSchematicannonPacket.Option;
|
||||||
import com.simibubi.create.networking.Packets;
|
import com.simibubi.create.networking.AllPackets;
|
||||||
|
|
||||||
import net.minecraft.client.gui.widget.Widget;
|
import net.minecraft.client.gui.widget.Widget;
|
||||||
import net.minecraft.client.renderer.RenderHelper;
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
|
@ -25,20 +25,20 @@ import net.minecraft.util.text.TextFormatting;
|
||||||
|
|
||||||
public class SchematicannonScreen extends AbstractSimiContainerScreen<SchematicannonContainer> {
|
public class SchematicannonScreen extends AbstractSimiContainerScreen<SchematicannonContainer> {
|
||||||
|
|
||||||
protected Vector<GuiIndicator> replaceLevelIndicators;
|
protected Vector<Indicator> replaceLevelIndicators;
|
||||||
protected Vector<SimiButton> replaceLevelButtons;
|
protected Vector<IconButton> replaceLevelButtons;
|
||||||
|
|
||||||
protected SimiButton skipMissingButton;
|
protected IconButton skipMissingButton;
|
||||||
protected GuiIndicator skipMissingIndicator;
|
protected Indicator skipMissingIndicator;
|
||||||
protected SimiButton skipTilesButton;
|
protected IconButton skipTilesButton;
|
||||||
protected GuiIndicator skipTilesIndicator;
|
protected Indicator skipTilesIndicator;
|
||||||
|
|
||||||
protected SimiButton playButton;
|
protected IconButton playButton;
|
||||||
protected GuiIndicator playIndicator;
|
protected Indicator playIndicator;
|
||||||
protected SimiButton pauseButton;
|
protected IconButton pauseButton;
|
||||||
protected GuiIndicator pauseIndicator;
|
protected Indicator pauseIndicator;
|
||||||
protected SimiButton resetButton;
|
protected IconButton resetButton;
|
||||||
protected GuiIndicator resetIndicator;
|
protected Indicator resetIndicator;
|
||||||
|
|
||||||
public SchematicannonScreen(SchematicannonContainer container, PlayerInventory inventory,
|
public SchematicannonScreen(SchematicannonContainer container, PlayerInventory inventory,
|
||||||
ITextComponent p_i51105_3_) {
|
ITextComponent p_i51105_3_) {
|
||||||
|
@ -47,7 +47,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
setWindowSize(GuiResources.SCHEMATICANNON.width + 50, GuiResources.SCHEMATICANNON.height + 80);
|
setWindowSize(ScreenResources.SCHEMATICANNON.width + 50, ScreenResources.SCHEMATICANNON.height + 80);
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
int x = guiLeft + 20;
|
int x = guiLeft + 20;
|
||||||
|
@ -56,12 +56,12 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
widgets.clear();
|
widgets.clear();
|
||||||
|
|
||||||
// Play Pause Stop
|
// Play Pause Stop
|
||||||
playButton = new SimiButton(x + 70, y + 55, GuiResources.ICON_PLAY);
|
playButton = new IconButton(x + 70, y + 55, ScreenResources.ICON_PLAY);
|
||||||
playIndicator = new GuiIndicator(x + 70, y + 50, "");
|
playIndicator = new Indicator(x + 70, y + 50, "");
|
||||||
pauseButton = new SimiButton(x + 88, y + 55, GuiResources.ICON_PAUSE);
|
pauseButton = new IconButton(x + 88, y + 55, ScreenResources.ICON_PAUSE);
|
||||||
pauseIndicator = new GuiIndicator(x + 88, y + 50, "");
|
pauseIndicator = new Indicator(x + 88, y + 50, "");
|
||||||
resetButton = new SimiButton(x + 106, y + 55, GuiResources.ICON_STOP);
|
resetButton = new IconButton(x + 106, y + 55, ScreenResources.ICON_STOP);
|
||||||
resetIndicator = new GuiIndicator(x + 106, y + 50, "Not Running");
|
resetIndicator = new Indicator(x + 106, y + 50, "Not Running");
|
||||||
resetIndicator.state = State.RED;
|
resetIndicator.state = State.RED;
|
||||||
Collections.addAll(widgets, playButton, playIndicator, pauseButton, pauseIndicator, resetButton,
|
Collections.addAll(widgets, playButton, playIndicator, pauseButton, pauseIndicator, resetButton,
|
||||||
resetIndicator);
|
resetIndicator);
|
||||||
|
@ -69,28 +69,28 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
// Replace settings
|
// Replace settings
|
||||||
replaceLevelButtons = new Vector<>(4);
|
replaceLevelButtons = new Vector<>(4);
|
||||||
replaceLevelIndicators = new Vector<>(4);
|
replaceLevelIndicators = new Vector<>(4);
|
||||||
List<GuiResources> icons = ImmutableList.of(GuiResources.ICON_DONT_REPLACE, GuiResources.ICON_REPLACE_SOLID,
|
List<ScreenResources> icons = ImmutableList.of(ScreenResources.ICON_DONT_REPLACE, ScreenResources.ICON_REPLACE_SOLID,
|
||||||
GuiResources.ICON_REPLACE_ANY, GuiResources.ICON_REPLACE_EMPTY);
|
ScreenResources.ICON_REPLACE_ANY, ScreenResources.ICON_REPLACE_EMPTY);
|
||||||
List<String> toolTips = ImmutableList.of("Don't Replace Solid Blocks", "Replace Solid with Solid",
|
List<String> toolTips = ImmutableList.of("Don't Replace Solid Blocks", "Replace Solid with Solid",
|
||||||
"Replace Solid with Any", "Replace Solid with Empty");
|
"Replace Solid with Any", "Replace Solid with Empty");
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
replaceLevelIndicators.add(new GuiIndicator(x + 16 + i * 18, y + 96, ""));
|
replaceLevelIndicators.add(new Indicator(x + 16 + i * 18, y + 96, ""));
|
||||||
replaceLevelButtons.add(new SimiButton(x + 16 + i * 18, y + 101, icons.get(i)));
|
replaceLevelButtons.add(new IconButton(x + 16 + i * 18, y + 101, icons.get(i)));
|
||||||
replaceLevelButtons.get(i).setToolTip(toolTips.get(i));
|
replaceLevelButtons.get(i).setToolTip(toolTips.get(i));
|
||||||
}
|
}
|
||||||
widgets.addAll(replaceLevelButtons);
|
widgets.addAll(replaceLevelButtons);
|
||||||
widgets.addAll(replaceLevelIndicators);
|
widgets.addAll(replaceLevelIndicators);
|
||||||
|
|
||||||
// Other Settings
|
// 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");
|
skipMissingButton.setToolTip("Skip missing Blocks");
|
||||||
skipMissingIndicator = new GuiIndicator(x + 106, y + 96, "");
|
skipMissingIndicator = new Indicator(x + 106, y + 96, "");
|
||||||
Collections.addAll(widgets, skipMissingButton, skipMissingIndicator);
|
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");
|
skipTilesButton.setToolTip("Protect Tile Entities");
|
||||||
skipTilesIndicator = new GuiIndicator(x + 124, y + 96, "");
|
skipTilesIndicator = new Indicator(x + 124, y + 96, "");
|
||||||
Collections.addAll(widgets, skipTilesButton, skipTilesIndicator);
|
Collections.addAll(widgets, skipTilesButton, skipTilesIndicator);
|
||||||
|
|
||||||
tick();
|
tick();
|
||||||
|
@ -140,10 +140,10 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
|
|
||||||
protected void handleTooltips() {
|
protected void handleTooltips() {
|
||||||
for (Widget w : widgets)
|
for (Widget w : widgets)
|
||||||
if (w instanceof SimiButton)
|
if (w instanceof IconButton)
|
||||||
if (!((SimiButton) w).getToolTip().isEmpty()) {
|
if (!((IconButton) w).getToolTip().isEmpty()) {
|
||||||
((SimiButton) w).setToolTip(((SimiButton) w).getToolTip().get(0));
|
((IconButton) w).setToolTip(((IconButton) w).getToolTip().get(0));
|
||||||
((SimiButton) w).getToolTip()
|
((IconButton) w).getToolTip()
|
||||||
.add(TextFormatting.DARK_GRAY + "" + TextFormatting.ITALIC + "[Ctrl] for more Info");
|
.add(TextFormatting.DARK_GRAY + "" + TextFormatting.ITALIC + "[Ctrl] for more Info");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,8 +209,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||||
GuiResources.PLAYER_INVENTORY.draw(this, guiLeft - 10, guiTop + 145);
|
ScreenResources.PLAYER_INVENTORY.draw(this, guiLeft - 10, guiTop + 145);
|
||||||
GuiResources.SCHEMATICANNON.draw(this, guiLeft + 20, guiTop);
|
ScreenResources.SCHEMATICANNON.draw(this, guiLeft + 20, guiTop);
|
||||||
|
|
||||||
SchematicannonTileEntity te = container.getTileEntity();
|
SchematicannonTileEntity te = container.getTileEntity();
|
||||||
renderPrintingProgress(te.schematicProgress);
|
renderPrintingProgress(te.schematicProgress);
|
||||||
|
@ -222,7 +222,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
|
|
||||||
renderCannon();
|
renderCannon();
|
||||||
|
|
||||||
font.drawString("Schematicannon", guiLeft + 80, guiTop + 10, GuiResources.FONT_COLOR);
|
font.drawString("Schematicannon", guiLeft + 80, guiTop + 10, ScreenResources.FONT_COLOR);
|
||||||
|
|
||||||
String msg = te.statusMsg;
|
String msg = te.statusMsg;
|
||||||
int stringWidth = font.getStringWidth(msg);
|
int stringWidth = font.getStringWidth(msg);
|
||||||
|
@ -231,7 +231,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
else
|
else
|
||||||
font.drawSplitString(msg, guiLeft + 20 + 45, guiTop + 24, 120, 0xCCDDFF);
|
font.drawSplitString(msg, guiLeft + 20 + 45, guiTop + 24, 120, 0xCCDDFF);
|
||||||
|
|
||||||
font.drawString("Placement Settings", guiLeft + 20 + 13, guiTop + 84, GuiResources.FONT_COLOR);
|
font.drawString("Placement Settings", guiLeft + 20 + 13, guiTop + 84, ScreenResources.FONT_COLOR);
|
||||||
font.drawString("Inventory", guiLeft - 10 + 7, guiTop + 145 + 6, 0x666666);
|
font.drawString("Inventory", guiLeft - 10 + 7, guiTop + 145 + 6, 0x666666);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,26 +253,26 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderBlueprintHighlight() {
|
protected void renderBlueprintHighlight() {
|
||||||
GuiResources.SCHEMATICANNON_HIGHLIGHT.draw(this, guiLeft + 20 + 8, guiTop + 31);
|
ScreenResources.SCHEMATICANNON_HIGHLIGHT.draw(this, guiLeft + 20 + 8, guiTop + 31);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderPrintingProgress(float progress) {
|
protected void renderPrintingProgress(float progress) {
|
||||||
progress = Math.min(progress, 1);
|
progress = Math.min(progress, 1);
|
||||||
GuiResources sprite = GuiResources.SCHEMATICANNON_PROGRESS;
|
ScreenResources sprite = ScreenResources.SCHEMATICANNON_PROGRESS;
|
||||||
minecraft.getTextureManager().bindTexture(sprite.location);
|
minecraft.getTextureManager().bindTexture(sprite.location);
|
||||||
blit(guiLeft + 20 + 39, guiTop + 36, sprite.startX, sprite.startY, (int) (sprite.width * progress),
|
blit(guiLeft + 20 + 39, guiTop + 36, sprite.startX, sprite.startY, (int) (sprite.width * progress),
|
||||||
sprite.height);
|
sprite.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderChecklistPrinterProgress(float progress) {
|
protected void renderChecklistPrinterProgress(float progress) {
|
||||||
GuiResources sprite = GuiResources.SCHEMATICANNON_PROGRESS_2;
|
ScreenResources sprite = ScreenResources.SCHEMATICANNON_PROGRESS_2;
|
||||||
minecraft.getTextureManager().bindTexture(sprite.location);
|
minecraft.getTextureManager().bindTexture(sprite.location);
|
||||||
blit(guiLeft + 20 + 222, guiTop + 42, sprite.startX, sprite.startY, sprite.width,
|
blit(guiLeft + 20 + 222, guiTop + 42, sprite.startX, sprite.startY, sprite.width,
|
||||||
(int) (sprite.height * progress));
|
(int) (sprite.height * progress));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderFuelBar(float amount) {
|
protected void renderFuelBar(float amount) {
|
||||||
GuiResources sprite = GuiResources.SCHEMATICANNON_FUEL;
|
ScreenResources sprite = ScreenResources.SCHEMATICANNON_FUEL;
|
||||||
minecraft.getTextureManager().bindTexture(sprite.location);
|
minecraft.getTextureManager().bindTexture(sprite.location);
|
||||||
blit(guiLeft + 20 + 73, guiTop + 135, sprite.startX, sprite.startY, (int) (sprite.width * amount),
|
blit(guiLeft + 20 + 73, guiTop + 135, sprite.startX, sprite.startY, (int) (sprite.width * amount),
|
||||||
sprite.height);
|
sprite.height);
|
||||||
|
@ -281,8 +281,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
@Override
|
@Override
|
||||||
protected void renderWindowForeground(int mouseX, int mouseY, float partialTicks) {
|
protected void renderWindowForeground(int mouseX, int mouseY, float partialTicks) {
|
||||||
int fuelX = guiLeft + 20 + 73, fuelY = guiTop + 135;
|
int fuelX = guiLeft + 20 + 73, fuelY = guiTop + 135;
|
||||||
if (mouseX >= fuelX && mouseY >= fuelY && mouseX <= fuelX + GuiResources.SCHEMATICANNON_FUEL.width
|
if (mouseX >= fuelX && mouseY >= fuelY && mouseX <= fuelX + ScreenResources.SCHEMATICANNON_FUEL.width
|
||||||
&& mouseY <= fuelY + GuiResources.SCHEMATICANNON_FUEL.height) {
|
&& mouseY <= fuelY + ScreenResources.SCHEMATICANNON_FUEL.height) {
|
||||||
container.getTileEntity();
|
container.getTileEntity();
|
||||||
SchematicannonTileEntity te = container.getTileEntity();
|
SchematicannonTileEntity te = container.getTileEntity();
|
||||||
int shotsLeft = (int) (te.fuelLevel / SchematicannonTileEntity.FUEL_USAGE_RATE);
|
int shotsLeft = (int) (te.fuelLevel / SchematicannonTileEntity.FUEL_USAGE_RATE);
|
||||||
|
@ -331,8 +331,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen<Schematica
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void sendOptionUpdate(Option option, boolean set) {
|
protected void sendOptionUpdate(Option option, boolean set) {
|
||||||
Packets.channel
|
AllPackets.channel
|
||||||
.sendToServer(PacketConfigureSchematicannon.setOption(container.getTileEntity().getPos(), option, set));
|
.sendToServer(ConfigureSchematicannonPacket.setOption(container.getTileEntity().getPos(), option, set));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
@EventBusSubscriber(value = Dist.CLIENT)
|
@EventBusSubscriber(value = Dist.CLIENT)
|
||||||
public class GuiOpener {
|
public class ScreenOpener {
|
||||||
|
|
||||||
private static Screen openedGuiNextTick;
|
private static Screen openedGuiNextTick;
|
||||||
|
|
|
@ -6,7 +6,7 @@ import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.AbstractGui;
|
import net.minecraft.client.gui.AbstractGui;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public enum GuiResources {
|
public enum ScreenResources {
|
||||||
|
|
||||||
// Inventories
|
// Inventories
|
||||||
PLAYER_INVENTORY("player_inventory.png", 176, 108),
|
PLAYER_INVENTORY("player_inventory.png", 176, 108),
|
||||||
|
@ -72,11 +72,11 @@ public enum GuiResources {
|
||||||
public int width, height;
|
public int width, height;
|
||||||
public int startX, startY;
|
public int startX, startY;
|
||||||
|
|
||||||
private GuiResources(String location, int width, int height) {
|
private ScreenResources(String location, int width, int height) {
|
||||||
this(location, 0, 0, width, height);
|
this(location, 0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GuiResources(String location, int startX, int startY, int width, int height) {
|
private ScreenResources(String location, int startX, int startY, int width, int height) {
|
||||||
this.location = new ResourceLocation(Create.ID, "textures/gui/" + location);
|
this.location = new ResourceLocation(Create.ID, "textures/gui/" + location);
|
||||||
this.width = width; this.height = height;
|
this.width = width; this.height = height;
|
||||||
this.startX = startX; this.startY = startY;
|
this.startX = startX; this.startY = startY;
|
|
@ -3,17 +3,17 @@ package com.simibubi.create.gui;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.simibubi.create.gui.widgets.DynamicLabel;
|
import com.simibubi.create.gui.widgets.Label;
|
||||||
import com.simibubi.create.gui.widgets.OptionScrollArea;
|
import com.simibubi.create.gui.widgets.SelectionScrollInput;
|
||||||
import com.simibubi.create.gui.widgets.ScrollArea;
|
import com.simibubi.create.gui.widgets.ScrollInput;
|
||||||
import com.simibubi.create.item.ItemWandSymmetry;
|
import com.simibubi.create.item.SymmetryWandItem;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryCrossPlane;
|
import com.simibubi.create.item.symmetry.SymmetryCrossPlane;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryElement;
|
import com.simibubi.create.item.symmetry.SymmetryElement;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryEmptySlot;
|
import com.simibubi.create.item.symmetry.SymmetryEmptySlot;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryPlane;
|
import com.simibubi.create.item.symmetry.SymmetryPlane;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryTriplePlane;
|
import com.simibubi.create.item.symmetry.SymmetryTriplePlane;
|
||||||
import com.simibubi.create.networking.PacketNbt;
|
import com.simibubi.create.networking.NbtPacket;
|
||||||
import com.simibubi.create.networking.Packets;
|
import com.simibubi.create.networking.AllPackets;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.client.renderer.RenderHelper;
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
|
@ -28,21 +28,21 @@ import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||||
import net.minecraftforge.fml.network.PacketDistributor;
|
import net.minecraftforge.fml.network.PacketDistributor;
|
||||||
|
|
||||||
public class GuiWandSymmetry extends AbstractSimiScreen {
|
public class SymmetryWandScreen extends AbstractSimiScreen {
|
||||||
|
|
||||||
private ScrollArea areaType;
|
private ScrollInput areaType;
|
||||||
private DynamicLabel labelType;
|
private Label labelType;
|
||||||
private ScrollArea areaAlign;
|
private ScrollInput areaAlign;
|
||||||
private DynamicLabel labelAlign;
|
private Label labelAlign;
|
||||||
|
|
||||||
private SymmetryElement currentElement;
|
private SymmetryElement currentElement;
|
||||||
private float animationProgress;
|
private float animationProgress;
|
||||||
private ItemStack wand;
|
private ItemStack wand;
|
||||||
|
|
||||||
public GuiWandSymmetry(ItemStack wand) {
|
public SymmetryWandScreen(ItemStack wand) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
currentElement = ItemWandSymmetry.getMirror(wand);
|
currentElement = SymmetryWandItem.getMirror(wand);
|
||||||
if (currentElement instanceof SymmetryEmptySlot) {
|
if (currentElement instanceof SymmetryEmptySlot) {
|
||||||
currentElement = new SymmetryPlane(Vec3d.ZERO);
|
currentElement = new SymmetryPlane(Vec3d.ZERO);
|
||||||
}
|
}
|
||||||
|
@ -53,14 +53,14 @@ public class GuiWandSymmetry extends AbstractSimiScreen {
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
super.init();
|
super.init();
|
||||||
this.setWindowSize(GuiResources.WAND_SYMMETRY.width + 50, GuiResources.WAND_SYMMETRY.height + 50);
|
this.setWindowSize(ScreenResources.WAND_SYMMETRY.width + 50, ScreenResources.WAND_SYMMETRY.height + 50);
|
||||||
|
|
||||||
labelType = new DynamicLabel(topLeftX + 122, topLeftY + 15, "").colored(0xFFFFFFFF).withShadow();
|
labelType = new Label(topLeftX + 122, topLeftY + 15, "").colored(0xFFFFFFFF).withShadow();
|
||||||
labelAlign = new DynamicLabel(topLeftX + 122, topLeftY + 35, "").colored(0xFFFFFFFF).withShadow();
|
labelAlign = new Label(topLeftX + 122, topLeftY + 35, "").colored(0xFFFFFFFF).withShadow();
|
||||||
|
|
||||||
int state = currentElement instanceof SymmetryTriplePlane ? 2
|
int state = currentElement instanceof SymmetryTriplePlane ? 2
|
||||||
: currentElement instanceof SymmetryCrossPlane ? 1 : 0;
|
: currentElement instanceof SymmetryCrossPlane ? 1 : 0;
|
||||||
areaType = new OptionScrollArea(topLeftX + 119, topLeftY + 12, 70, 14)
|
areaType = new SelectionScrollInput(topLeftX + 119, topLeftY + 12, 70, 14)
|
||||||
.forOptions(SymmetryElement.TOOLTIP_ELEMENTS).titled("Type of Mirror").writingTo(labelType)
|
.forOptions(SymmetryElement.TOOLTIP_ELEMENTS).titled("Type of Mirror").writingTo(labelType)
|
||||||
.setState(state);
|
.setState(state);
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ public class GuiWandSymmetry extends AbstractSimiScreen {
|
||||||
widgets.remove(areaAlign);
|
widgets.remove(areaAlign);
|
||||||
}
|
}
|
||||||
|
|
||||||
areaAlign = new OptionScrollArea(topLeftX + 119, topLeftY + 32, 70, 14).forOptions(element.getAlignToolTips())
|
areaAlign = new SelectionScrollInput(topLeftX + 119, topLeftY + 32, 70, 14).forOptions(element.getAlignToolTips())
|
||||||
.titled("Direction").writingTo(labelAlign).setState(element.getOrientationIndex())
|
.titled("Direction").writingTo(labelAlign).setState(element.getOrientationIndex())
|
||||||
.calling(element::setOrientation);
|
.calling(element::setOrientation);
|
||||||
|
|
||||||
|
@ -111,13 +111,13 @@ public class GuiWandSymmetry extends AbstractSimiScreen {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||||
GuiResources.WAND_SYMMETRY.draw(this, topLeftX, topLeftY);
|
ScreenResources.WAND_SYMMETRY.draw(this, topLeftX, topLeftY);
|
||||||
|
|
||||||
int x = topLeftX + 63;
|
int x = topLeftX + 63;
|
||||||
int y = topLeftY + 15;
|
int y = topLeftY + 15;
|
||||||
|
|
||||||
font.drawString("Symmetry", x, y, GuiResources.FONT_COLOR);
|
font.drawString("Symmetry", x, y, ScreenResources.FONT_COLOR);
|
||||||
font.drawString("Direction", x, y + 20, GuiResources.FONT_COLOR);
|
font.drawString("Direction", x, y + 20, ScreenResources.FONT_COLOR);
|
||||||
|
|
||||||
minecraft.getTextureManager().bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE);
|
minecraft.getTextureManager().bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE);
|
||||||
GlStateManager.enableBlend();
|
GlStateManager.enableBlend();
|
||||||
|
@ -168,9 +168,9 @@ public class GuiWandSymmetry extends AbstractSimiScreen {
|
||||||
public void removed() {
|
public void removed() {
|
||||||
ItemStack heldItemMainhand = minecraft.player.getHeldItemMainhand();
|
ItemStack heldItemMainhand = minecraft.player.getHeldItemMainhand();
|
||||||
CompoundNBT compound = heldItemMainhand.getTag();
|
CompoundNBT compound = heldItemMainhand.getTag();
|
||||||
compound.put(ItemWandSymmetry.$SYMMETRY, currentElement.writeToNbt());
|
compound.put(SymmetryWandItem.$SYMMETRY, currentElement.writeToNbt());
|
||||||
heldItemMainhand.setTag(compound);
|
heldItemMainhand.setTag(compound);
|
||||||
Packets.channel.send(PacketDistributor.SERVER.noArg(), new PacketNbt(heldItemMainhand));
|
AllPackets.channel.send(PacketDistributor.SERVER.noArg(), new NbtPacket(heldItemMainhand));
|
||||||
minecraft.player.setHeldItem(Hand.MAIN_HAND, heldItemMainhand);
|
minecraft.player.setHeldItem(Hand.MAIN_HAND, heldItemMainhand);
|
||||||
super.removed();
|
super.removed();
|
||||||
}
|
}
|
|
@ -7,7 +7,7 @@ import org.lwjgl.glfw.GLFW;
|
||||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||||
import net.minecraft.client.gui.widget.button.Button;
|
import net.minecraft.client.gui.widget.button.Button;
|
||||||
|
|
||||||
public class GuiTextPrompt extends AbstractSimiScreen {
|
public class TextInputPromptScreen extends AbstractSimiScreen {
|
||||||
|
|
||||||
private Consumer<String> callback;
|
private Consumer<String> callback;
|
||||||
private Consumer<String> abortCallback;
|
private Consumer<String> abortCallback;
|
||||||
|
@ -22,7 +22,7 @@ public class GuiTextPrompt extends AbstractSimiScreen {
|
||||||
|
|
||||||
private boolean confirmed;
|
private boolean confirmed;
|
||||||
|
|
||||||
public GuiTextPrompt(Consumer<String> callBack, Consumer<String> abortCallback) {
|
public TextInputPromptScreen(Consumer<String> callBack, Consumer<String> abortCallback) {
|
||||||
super();
|
super();
|
||||||
this.callback = callBack;
|
this.callback = callBack;
|
||||||
this.abortCallback = abortCallback;
|
this.abortCallback = abortCallback;
|
||||||
|
@ -35,7 +35,7 @@ public class GuiTextPrompt extends AbstractSimiScreen {
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
super.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 = new TextFieldWidget(font, topLeftX + 33, topLeftY + 26, 128, 8, "");
|
||||||
this.nameField.setTextColor(-1);
|
this.nameField.setTextColor(-1);
|
||||||
|
@ -61,9 +61,9 @@ public class GuiTextPrompt extends AbstractSimiScreen {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
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,
|
font.drawString(title, topLeftX + (sWidth / 2) - (font.getStringWidth(title) / 2), topLeftY + 11,
|
||||||
GuiResources.FONT_COLOR);
|
ScreenResources.FONT_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -4,10 +4,12 @@ import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
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.MainWindow;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
|
||||||
|
@ -33,7 +35,7 @@ public class ToolSelectionScreen extends Screen {
|
||||||
|
|
||||||
callback.accept(tools.get(selection));
|
callback.accept(tools.get(selection));
|
||||||
|
|
||||||
w = tools.size() * 50 + 30;
|
w = Math.max(tools.size() * 50 + 30, 220);
|
||||||
h = 30;
|
h = 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,16 +57,46 @@ public class ToolSelectionScreen extends Screen {
|
||||||
int y = mainWindow.getScaledHeight() - h - 75;
|
int y = mainWindow.getScaledHeight() - h - 75;
|
||||||
|
|
||||||
GlStateManager.pushMatrix();
|
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.enableBlend();
|
||||||
GlStateManager.enableAlphaTest();
|
|
||||||
GlStateManager.color4f(1, 1, 1, focused? 7 / 8f : 1 / 2f);
|
GlStateManager.color4f(1, 1, 1, focused? 7 / 8f : 1 / 2f);
|
||||||
|
|
||||||
Minecraft.getInstance().getTextureManager().bindTexture(gray.location);
|
Minecraft.getInstance().getTextureManager().bindTexture(gray.location);
|
||||||
blit(x - 15, y, gray.startX, gray.startY, w, h, gray.width, gray.height);
|
blit(x - 15, y, gray.startX, gray.startY, w, h, gray.width, gray.height);
|
||||||
|
|
||||||
|
float toolTipAlpha = yOffset / 10;
|
||||||
|
FontRenderer font = minecraft.fontRenderer;
|
||||||
|
List<String> 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);
|
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++) {
|
for (int i = 0; i < tools.size(); i++) {
|
||||||
GlStateManager.pushMatrix();
|
GlStateManager.pushMatrix();
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,17 +1,17 @@
|
||||||
package com.simibubi.create.gui.widgets;
|
package com.simibubi.create.gui.widgets;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
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.client.Minecraft;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
public class SimiButton extends AbstractSimiWidget {
|
public class IconButton extends AbstractSimiWidget {
|
||||||
|
|
||||||
private GuiResources icon;
|
private ScreenResources icon;
|
||||||
protected boolean pressed;
|
protected boolean pressed;
|
||||||
|
|
||||||
public SimiButton(int x, int y, GuiResources icon) {
|
public IconButton(int x, int y, ScreenResources icon) {
|
||||||
super(x, y, 18, 18);
|
super(x, y, 18, 18);
|
||||||
this.icon = icon;
|
this.icon = icon;
|
||||||
}
|
}
|
||||||
|
@ -19,14 +19,14 @@ public class SimiButton extends AbstractSimiWidget {
|
||||||
@Override
|
@Override
|
||||||
public void renderButton(int mouseX, int mouseY, float partialTicks) {
|
public void renderButton(int mouseX, int mouseY, float partialTicks) {
|
||||||
if (this.visible) {
|
if (this.visible) {
|
||||||
ResourceLocation buttonTextures = GuiResources.BUTTON.location;
|
ResourceLocation buttonTextures = ScreenResources.BUTTON.location;
|
||||||
ResourceLocation iconTexture = icon.location;
|
ResourceLocation iconTexture = icon.location;
|
||||||
this.isHovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
|
this.isHovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height;
|
||||||
|
|
||||||
GuiResources button =
|
ScreenResources button =
|
||||||
(pressed || !active) ? button = GuiResources.BUTTON_DOWN :
|
(pressed || !active) ? button = ScreenResources.BUTTON_DOWN :
|
||||||
(isHovered) ? GuiResources.BUTTON_HOVER :
|
(isHovered) ? ScreenResources.BUTTON_HOVER :
|
||||||
GuiResources.BUTTON;
|
ScreenResources.BUTTON;
|
||||||
|
|
||||||
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
|
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
Minecraft.getInstance().getTextureManager().bindTexture(buttonTextures);
|
Minecraft.getInstance().getTextureManager().bindTexture(buttonTextures);
|
35
src/main/java/com/simibubi/create/gui/widgets/Indicator.java
Normal file
35
src/main/java/com/simibubi/create/gui/widgets/Indicator.java
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,14 +3,14 @@ package com.simibubi.create.gui.widgets;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
|
|
||||||
public class DynamicLabel extends AbstractSimiWidget {
|
public class Label extends AbstractSimiWidget {
|
||||||
|
|
||||||
public String text;
|
public String text;
|
||||||
protected boolean hasShadow;
|
protected boolean hasShadow;
|
||||||
protected int color;
|
protected int color;
|
||||||
protected FontRenderer font;
|
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);
|
super(x, y, Minecraft.getInstance().fontRenderer.getStringWidth(text), 10);
|
||||||
font = Minecraft.getInstance().fontRenderer;
|
font = Minecraft.getInstance().fontRenderer;
|
||||||
this.text = "Label";
|
this.text = "Label";
|
||||||
|
@ -18,12 +18,12 @@ public class DynamicLabel extends AbstractSimiWidget {
|
||||||
hasShadow = false;
|
hasShadow = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicLabel colored(int color) {
|
public Label colored(int color) {
|
||||||
this.color = color;
|
this.color = color;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicLabel withShadow() {
|
public Label withShadow() {
|
||||||
this.hasShadow = true;
|
this.hasShadow = true;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
|
@ -2,44 +2,44 @@ package com.simibubi.create.gui.widgets;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import com.simibubi.create.gui.Keyboard;
|
import com.simibubi.create.utility.Keyboard;
|
||||||
|
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
|
||||||
public class ScrollArea extends AbstractSimiWidget {
|
public class ScrollInput extends AbstractSimiWidget {
|
||||||
|
|
||||||
protected Consumer<Integer> onScroll;
|
protected Consumer<Integer> onScroll;
|
||||||
protected int state;
|
protected int state;
|
||||||
protected String title = "Choose an option";
|
protected String title = "Choose an option";
|
||||||
protected DynamicLabel displayLabel;
|
protected Label displayLabel;
|
||||||
|
|
||||||
protected int min, max;
|
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);
|
super(xIn, yIn, widthIn, heightIn);
|
||||||
state = 0;
|
state = 0;
|
||||||
min = 0;
|
min = 0;
|
||||||
max = 1;
|
max = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScrollArea withRange(int min, int max) {
|
public ScrollInput withRange(int min, int max) {
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScrollArea calling(Consumer<Integer> onScroll) {
|
public ScrollInput calling(Consumer<Integer> onScroll) {
|
||||||
this.onScroll = onScroll;
|
this.onScroll = onScroll;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScrollArea titled(String title) {
|
public ScrollInput titled(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
updateTooltip();
|
updateTooltip();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScrollArea writingTo(DynamicLabel label) {
|
public ScrollInput writingTo(Label label) {
|
||||||
this.displayLabel = label;
|
this.displayLabel = label;
|
||||||
writeToLabel();
|
writeToLabel();
|
||||||
return this;
|
return this;
|
||||||
|
@ -49,7 +49,7 @@ public class ScrollArea extends AbstractSimiWidget {
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScrollArea setState(int state) {
|
public ScrollInput setState(int state) {
|
||||||
this.state = state;
|
this.state = state;
|
||||||
clampState();
|
clampState();
|
||||||
updateTooltip();
|
updateTooltip();
|
|
@ -5,16 +5,16 @@ import java.util.List;
|
||||||
|
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
|
||||||
public class OptionScrollArea extends ScrollArea {
|
public class SelectionScrollInput extends ScrollInput {
|
||||||
|
|
||||||
protected List<String> options;
|
protected List<String> 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);
|
super(xIn, yIn, widthIn, heightIn);
|
||||||
options = new ArrayList<>();
|
options = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScrollArea forOptions(List<String> options) {
|
public ScrollInput forOptions(List<String> options) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.max = options.size();
|
this.max = options.size();
|
||||||
updateTooltip();
|
updateTooltip();
|
|
@ -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<ITextComponent> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -5,13 +5,16 @@ import java.io.InputStream;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.nio.file.StandardOpenOption;
|
import java.nio.file.StandardOpenOption;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.gui.BlueprintEditScreen;
|
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.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -25,6 +28,7 @@ import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.Mirror;
|
import net.minecraft.util.Mirror;
|
||||||
import net.minecraft.util.Rotation;
|
import net.minecraft.util.Rotation;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -35,9 +39,9 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
import net.minecraftforge.fml.common.thread.SidedThreadGroups;
|
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));
|
super(properties.maxStackSize(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +64,21 @@ public class ItemBlueprint extends Item {
|
||||||
return blueprint;
|
return blueprint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> 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) {
|
public static void writeSize(ItemStack blueprint) {
|
||||||
CompoundNBT tag = blueprint.getTag();
|
CompoundNBT tag = blueprint.getTag();
|
||||||
Template t = getSchematic(blueprint);
|
Template t = getSchematic(blueprint);
|
||||||
|
@ -119,7 +138,7 @@ public class ItemBlueprint extends Item {
|
||||||
|
|
||||||
@OnlyIn(value = Dist.CLIENT)
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
protected void displayBlueprintScreen() {
|
protected void displayBlueprintScreen() {
|
||||||
GuiOpener.open(new BlueprintEditScreen());
|
ScreenOpener.open(new BlueprintEditScreen());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -51,7 +51,7 @@ public class SymmetryHandler {
|
||||||
PlayerInventory inv = player.inventory;
|
PlayerInventory inv = player.inventory;
|
||||||
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
||||||
if (!inv.getStackInSlot(i).isEmpty() && inv.getStackInSlot(i).getItem() == AllItems.SYMMETRY_WAND.get()) {
|
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());
|
event.getPlacedBlock());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ public class SymmetryHandler {
|
||||||
PlayerInventory inv = player.inventory;
|
PlayerInventory inv = player.inventory;
|
||||||
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
||||||
if (!inv.getStackInSlot(i).isEmpty() && AllItems.SYMMETRY_WAND.typeOf(inv.getStackInSlot(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++) {
|
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
||||||
ItemStack stackInSlot = player.inventory.getStackInSlot(i);
|
ItemStack stackInSlot = player.inventory.getStackInSlot(i);
|
||||||
if (stackInSlot != null && AllItems.SYMMETRY_WAND.typeOf(stackInSlot)
|
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)
|
if (mirror instanceof SymmetryEmptySlot)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -128,9 +128,9 @@ public class SymmetryHandler {
|
||||||
ItemStack stackInSlot = player.inventory.getStackInSlot(i);
|
ItemStack stackInSlot = player.inventory.getStackInSlot(i);
|
||||||
|
|
||||||
if (stackInSlot != null && AllItems.SYMMETRY_WAND.typeOf(stackInSlot)
|
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)
|
if (mirror instanceof SymmetryEmptySlot)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -5,18 +5,20 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.simibubi.create.gui.GuiOpener;
|
import com.simibubi.create.gui.ScreenOpener;
|
||||||
import com.simibubi.create.gui.GuiWandSymmetry;
|
import com.simibubi.create.gui.SymmetryWandScreen;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryCrossPlane;
|
import com.simibubi.create.item.symmetry.SymmetryCrossPlane;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryElement;
|
import com.simibubi.create.item.symmetry.SymmetryElement;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryEmptySlot;
|
import com.simibubi.create.item.symmetry.SymmetryEmptySlot;
|
||||||
import com.simibubi.create.item.symmetry.SymmetryPlane;
|
import com.simibubi.create.item.symmetry.SymmetryPlane;
|
||||||
import com.simibubi.create.networking.PacketSymmetryEffect;
|
import com.simibubi.create.networking.SymmetryEffectPacket;
|
||||||
import com.simibubi.create.networking.Packets;
|
import com.simibubi.create.utility.Keyboard;
|
||||||
|
import com.simibubi.create.networking.AllPackets;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.Item;
|
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.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.StringTextComponent;
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -39,14 +42,33 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
import net.minecraftforge.fml.network.PacketDistributor;
|
import net.minecraftforge.fml.network.PacketDistributor;
|
||||||
|
|
||||||
public class ItemWandSymmetry extends Item {
|
public class SymmetryWandItem extends Item {
|
||||||
|
|
||||||
public static final String $SYMMETRY = "symmetry";
|
public static final String $SYMMETRY = "symmetry";
|
||||||
private static final String $ENABLE = "enable";
|
private static final String $ENABLE = "enable";
|
||||||
|
|
||||||
public ItemWandSymmetry(Properties properties) {
|
public SymmetryWandItem(Properties properties) {
|
||||||
super(properties.maxStackSize(1));
|
super(properties.maxStackSize(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> 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
|
@Override
|
||||||
public ActionResultType onItemUse(ItemUseContext context) {
|
public ActionResultType onItemUse(ItemUseContext context) {
|
||||||
|
@ -122,7 +144,7 @@ public class ItemWandSymmetry extends Item {
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
private void openWandGUI(ItemStack wand) {
|
private void openWandGUI(ItemStack wand) {
|
||||||
GuiOpener.open(new GuiWandSymmetry(wand));
|
ScreenOpener.open(new SymmetryWandScreen(wand));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkNBT(ItemStack 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),
|
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> player),
|
||||||
new PacketSymmetryEffect(to, targets));
|
new SymmetryEffectPacket(to, targets));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void remove(World world, ItemStack wand, PlayerEntity player, BlockPos pos) {
|
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),
|
AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> player),
|
||||||
new PacketSymmetryEffect(to, targets));
|
new SymmetryEffectPacket(to, targets));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,15 +6,19 @@ import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import com.simibubi.create.utility.Keyboard;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.SaplingBlock;
|
import net.minecraft.block.SaplingBlock;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.fluid.Fluid;
|
import net.minecraft.fluid.Fluid;
|
||||||
import net.minecraft.item.BoneMealItem;
|
import net.minecraft.item.BoneMealItem;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.ItemUseContext;
|
import net.minecraft.item.ItemUseContext;
|
||||||
import net.minecraft.item.crafting.RecipeManager;
|
import net.minecraft.item.crafting.RecipeManager;
|
||||||
import net.minecraft.scoreboard.Scoreboard;
|
import net.minecraft.scoreboard.Scoreboard;
|
||||||
|
@ -23,16 +27,31 @@ import net.minecraft.util.ActionResultType;
|
||||||
import net.minecraft.util.SoundCategory;
|
import net.minecraft.util.SoundCategory;
|
||||||
import net.minecraft.util.SoundEvent;
|
import net.minecraft.util.SoundEvent;
|
||||||
import net.minecraft.util.math.BlockPos;
|
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.EmptyTickList;
|
||||||
import net.minecraft.world.ITickList;
|
import net.minecraft.world.ITickList;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.storage.MapData;
|
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);
|
super(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> 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
|
@Override
|
||||||
public ActionResultType onItemUse(ItemUseContext context) {
|
public ActionResultType onItemUse(ItemUseContext context) {
|
|
@ -6,7 +6,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.simibubi.create.AllBlocks;
|
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.block.BlockState;
|
||||||
import net.minecraft.util.IStringSerializable;
|
import net.minecraft.util.IStringSerializable;
|
||||||
|
@ -84,7 +84,7 @@ public class SymmetryCrossPlane extends SymmetryElement {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getModel() {
|
public BlockState getModel() {
|
||||||
return AllBlocks.SYMMETRY_CROSSPLANE.block.getDefaultState().with(BlockSymmetryCrossPlane.align,
|
return AllBlocks.SYMMETRY_CROSSPLANE.block.getDefaultState().with(CrossPlaneSymmetryBlock.align,
|
||||||
(Align) orientation);
|
(Align) orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.simibubi.create.AllBlocks;
|
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.block.BlockState;
|
||||||
import net.minecraft.util.IStringSerializable;
|
import net.minecraft.util.IStringSerializable;
|
||||||
|
@ -80,7 +80,7 @@ public class SymmetryPlane extends SymmetryElement {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getModel() {
|
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
|
@Override
|
||||||
|
|
30
src/main/java/com/simibubi/create/networking/AllPackets.java
Normal file
30
src/main/java/com/simibubi/create/networking/AllPackets.java
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||||
|
|
||||||
public class PacketConfigureSchematicannon {
|
public class ConfigureSchematicannonPacket {
|
||||||
|
|
||||||
public static enum Option {
|
public static enum Option {
|
||||||
DONT_REPLACE, REPLACE_SOLID, REPLACE_ANY, REPLACE_EMPTY, SKIP_MISSING, SKIP_TILES, PLAY, PAUSE, STOP;
|
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 boolean set;
|
||||||
private BlockPos pos;
|
private BlockPos pos;
|
||||||
|
|
||||||
public static PacketConfigureSchematicannon setOption(BlockPos pos, Option option, boolean set) {
|
public static ConfigureSchematicannonPacket setOption(BlockPos pos, Option option, boolean set) {
|
||||||
PacketConfigureSchematicannon packet = new PacketConfigureSchematicannon(pos);
|
ConfigureSchematicannonPacket packet = new ConfigureSchematicannonPacket(pos);
|
||||||
packet.option = option;
|
packet.option = option;
|
||||||
packet.set = set;
|
packet.set = set;
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketConfigureSchematicannon(BlockPos pos) {
|
public ConfigureSchematicannonPacket(BlockPos pos) {
|
||||||
this.pos = pos;
|
this.pos = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketConfigureSchematicannon(PacketBuffer buffer) {
|
public ConfigureSchematicannonPacket(PacketBuffer buffer) {
|
||||||
pos = buffer.readBlockPos();
|
pos = buffer.readBlockPos();
|
||||||
option = Option.values()[buffer.readInt()];
|
option = Option.values()[buffer.readInt()];
|
||||||
set = buffer.readBoolean();
|
set = buffer.readBoolean();
|
|
@ -7,21 +7,21 @@ import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.network.PacketBuffer;
|
import net.minecraft.network.PacketBuffer;
|
||||||
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||||
|
|
||||||
public class PacketNbt {
|
public class NbtPacket {
|
||||||
|
|
||||||
public ItemStack stack;
|
public ItemStack stack;
|
||||||
public int slot;
|
public int slot;
|
||||||
|
|
||||||
public PacketNbt(ItemStack stack) {
|
public NbtPacket(ItemStack stack) {
|
||||||
this(stack, -1);
|
this(stack, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketNbt(ItemStack stack, int slot) {
|
public NbtPacket(ItemStack stack, int slot) {
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
this.slot = slot;
|
this.slot = slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketNbt(PacketBuffer buffer) {
|
public NbtPacket(PacketBuffer buffer) {
|
||||||
stack = buffer.readItemStack();
|
stack = buffer.readItemStack();
|
||||||
slot = buffer.readInt();
|
slot = buffer.readInt();
|
||||||
}
|
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -11,7 +11,7 @@ import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.ServerWorld;
|
import net.minecraft.world.ServerWorld;
|
||||||
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||||
|
|
||||||
public class PacketSchematicUpload {
|
public class SchematicUploadPacket {
|
||||||
|
|
||||||
public static final int BEGIN = 0;
|
public static final int BEGIN = 0;
|
||||||
public static final int WRITE = 1;
|
public static final int WRITE = 1;
|
||||||
|
@ -22,28 +22,28 @@ public class PacketSchematicUpload {
|
||||||
private String schematic;
|
private String schematic;
|
||||||
private byte[] data;
|
private byte[] data;
|
||||||
|
|
||||||
public PacketSchematicUpload(int code, String schematic) {
|
public SchematicUploadPacket(int code, String schematic) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.schematic = schematic;
|
this.schematic = schematic;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PacketSchematicUpload begin(String schematic, long size) {
|
public static SchematicUploadPacket begin(String schematic, long size) {
|
||||||
PacketSchematicUpload pkt = new PacketSchematicUpload(BEGIN, schematic);
|
SchematicUploadPacket pkt = new SchematicUploadPacket(BEGIN, schematic);
|
||||||
pkt.size = size;
|
pkt.size = size;
|
||||||
return pkt;
|
return pkt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PacketSchematicUpload write(String schematic, byte[] data) {
|
public static SchematicUploadPacket write(String schematic, byte[] data) {
|
||||||
PacketSchematicUpload pkt = new PacketSchematicUpload(WRITE, schematic);
|
SchematicUploadPacket pkt = new SchematicUploadPacket(WRITE, schematic);
|
||||||
pkt.data = data;
|
pkt.data = data;
|
||||||
return pkt;
|
return pkt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PacketSchematicUpload finish(String schematic) {
|
public static SchematicUploadPacket finish(String schematic) {
|
||||||
return new PacketSchematicUpload(FINISH, schematic);
|
return new SchematicUploadPacket(FINISH, schematic);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketSchematicUpload(PacketBuffer buffer) {
|
public SchematicUploadPacket(PacketBuffer buffer) {
|
||||||
code = buffer.readInt();
|
code = buffer.readInt();
|
||||||
schematic = buffer.readString(256);
|
schematic = buffer.readString(256);
|
||||||
|
|
|
@ -12,17 +12,17 @@ import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
import net.minecraftforge.fml.network.NetworkEvent.Context;
|
||||||
|
|
||||||
public class PacketSymmetryEffect {
|
public class SymmetryEffectPacket {
|
||||||
|
|
||||||
private BlockPos mirror;
|
private BlockPos mirror;
|
||||||
private List<BlockPos> positions;
|
private List<BlockPos> positions;
|
||||||
|
|
||||||
public PacketSymmetryEffect(BlockPos mirror, List<BlockPos> positions) {
|
public SymmetryEffectPacket(BlockPos mirror, List<BlockPos> positions) {
|
||||||
this.mirror = mirror;
|
this.mirror = mirror;
|
||||||
this.positions = positions;
|
this.positions = positions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketSymmetryEffect(PacketBuffer buffer) {
|
public SymmetryEffectPacket(PacketBuffer buffer) {
|
||||||
mirror = buffer.readBlockPos();
|
mirror = buffer.readBlockPos();
|
||||||
int amt = buffer.readInt();
|
int amt = buffer.readInt();
|
||||||
positions = new ArrayList<>(amt);
|
positions = new ArrayList<>(amt);
|
|
@ -11,28 +11,36 @@ import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.gui.GuiOpener;
|
import com.simibubi.create.gui.ScreenOpener;
|
||||||
import com.simibubi.create.gui.GuiTextPrompt;
|
import com.simibubi.create.gui.TextInputPromptScreen;
|
||||||
import com.simibubi.create.gui.Keyboard;
|
|
||||||
import com.simibubi.create.utility.FilesHelper;
|
import com.simibubi.create.utility.FilesHelper;
|
||||||
|
import com.simibubi.create.utility.Keyboard;
|
||||||
import com.simibubi.create.utility.RaycastHelper;
|
import com.simibubi.create.utility.RaycastHelper;
|
||||||
|
import com.simibubi.create.utility.RaycastHelper.PredicateTraceResult;
|
||||||
import com.simibubi.create.utility.TessellatorHelper;
|
import com.simibubi.create.utility.TessellatorHelper;
|
||||||
|
import com.simibubi.create.utility.TessellatorTextures;
|
||||||
|
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||||
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
import net.minecraft.client.renderer.WorldRenderer;
|
import net.minecraft.client.renderer.WorldRenderer;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.item.ItemUseContext;
|
import net.minecraft.item.ItemUseContext;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.nbt.CompressedStreamTools;
|
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.Hand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.BlockRayTraceResult;
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.MutableBoundingBox;
|
import net.minecraft.util.math.MutableBoundingBox;
|
||||||
import net.minecraft.util.math.RayTraceResult.Type;
|
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.StringTextComponent;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.gen.feature.template.Template;
|
import net.minecraft.world.gen.feature.template.Template;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent;
|
||||||
|
@ -47,7 +55,9 @@ import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
|
||||||
public class BlueprintAndQuillHandler {
|
public class BlueprintAndQuillHandler {
|
||||||
|
|
||||||
static BlockPos firstPos;
|
static BlockPos firstPos;
|
||||||
|
static BlockPos secondPos;
|
||||||
static BlockPos selectedPos;
|
static BlockPos selectedPos;
|
||||||
|
static Direction selectedFace;
|
||||||
static int range = 10;
|
static int range = 10;
|
||||||
|
|
||||||
private static boolean active() {
|
private static boolean active() {
|
||||||
|
@ -56,11 +66,12 @@ public class BlueprintAndQuillHandler {
|
||||||
|
|
||||||
private static boolean present() {
|
private static boolean present() {
|
||||||
return Minecraft.getInstance() != null && Minecraft.getInstance().world != null
|
return Minecraft.getInstance() != null && Minecraft.getInstance().world != null
|
||||||
&& Minecraft.getInstance().currentScreen == null && !Minecraft.getInstance().player.isSneaking();
|
&& Minecraft.getInstance().currentScreen == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@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) {
|
public static void onMouseScrolled(MouseScrollEvent.Post event) {
|
||||||
if (event.getGui() != null)
|
if (event.getGui() != null)
|
||||||
return;
|
return;
|
||||||
|
@ -68,7 +79,33 @@ public class BlueprintAndQuillHandler {
|
||||||
return;
|
return;
|
||||||
if (!Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL))
|
if (!Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL))
|
||||||
return;
|
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);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,32 +115,45 @@ public class BlueprintAndQuillHandler {
|
||||||
return;
|
return;
|
||||||
if (event.getButton() != 1)
|
if (event.getButton() != 1)
|
||||||
return;
|
return;
|
||||||
if (!active() && !Minecraft.getInstance().player.isSneaking())
|
if (!active())
|
||||||
return;
|
return;
|
||||||
if (selectedPos == null)
|
ClientPlayerEntity player = Minecraft.getInstance().player;
|
||||||
return;
|
|
||||||
if (Minecraft.getInstance().player.isSneaking()) {
|
if (player.isSneaking()) {
|
||||||
firstPos = null;
|
firstPos = null;
|
||||||
|
secondPos = null;
|
||||||
|
player.sendStatusMessage(new StringTextComponent("Removed selection."), true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstPos != null) {
|
if (secondPos != null) {
|
||||||
GuiTextPrompt guiScreenIn = new GuiTextPrompt(BlueprintAndQuillHandler::saveSchematic, s -> {
|
TextInputPromptScreen guiScreenIn = new TextInputPromptScreen(BlueprintAndQuillHandler::saveSchematic, s -> {
|
||||||
firstPos = null;
|
|
||||||
});
|
});
|
||||||
guiScreenIn.setTitle("Enter a name for the Schematic:");
|
guiScreenIn.setTitle("Enter a name for the Schematic:");
|
||||||
guiScreenIn.setButtonTextConfirm("Save");
|
guiScreenIn.setButtonTextConfirm("Save");
|
||||||
guiScreenIn.setButtonTextAbort("Cancel");
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
firstPos = selectedPos;
|
firstPos = selectedPos;
|
||||||
|
player.sendStatusMessage(new StringTextComponent(TextFormatting.GREEN + "First position set."), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void saveSchematic(String string) {
|
public static void saveSchematic(String string) {
|
||||||
Template t = new Template();
|
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),
|
t.takeBlocksFromWorld(Minecraft.getInstance().world, new BlockPos(bb.minX, bb.minY, bb.minZ),
|
||||||
new BlockPos(bb.getXSize(), bb.getYSize(), bb.getZSize()), false, Blocks.AIR);
|
new BlockPos(bb.getXSize(), bb.getYSize(), bb.getZSize()), false, Blocks.AIR);
|
||||||
|
|
||||||
|
@ -127,6 +177,7 @@ public class BlueprintAndQuillHandler {
|
||||||
IOUtils.closeQuietly(outputStream);
|
IOUtils.closeQuietly(outputStream);
|
||||||
}
|
}
|
||||||
firstPos = null;
|
firstPos = null;
|
||||||
|
secondPos = null;
|
||||||
Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent("Saved as " + filepath), true);
|
Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent("Saved as " + filepath), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,29 +187,60 @@ public class BlueprintAndQuillHandler {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TessellatorHelper.prepareForDrawing();
|
TessellatorHelper.prepareForDrawing();
|
||||||
GlStateManager.lineWidth(3);
|
GlStateManager.lineWidth(2);
|
||||||
GlStateManager.color4f(1, 1, 1, 1);
|
GlStateManager.color4f(1, 1, 1, 1);
|
||||||
GlStateManager.disableTexture();
|
GlStateManager.disableTexture();
|
||||||
|
|
||||||
if (firstPos != null) {
|
if (secondPos == null) {
|
||||||
MutableBoundingBox bb = new MutableBoundingBox(firstPos, firstPos.add(1, 1, 1));
|
// 1st Step
|
||||||
BlockPos min = new BlockPos(bb.minX, bb.minY, bb.minZ);
|
if (firstPos != null && selectedPos == null) {
|
||||||
BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ);
|
MutableBoundingBox bb = new MutableBoundingBox(firstPos, firstPos.add(1, 1, 1));
|
||||||
drawBox(min, max);
|
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 (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 (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);
|
GlStateManager.lineWidth(1);
|
||||||
|
@ -166,9 +248,11 @@ public class BlueprintAndQuillHandler {
|
||||||
TessellatorHelper.cleanUpAfterDrawing();
|
TessellatorHelper.cleanUpAfterDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void drawBox(BlockPos min, BlockPos max) {
|
protected static void drawBox(BlockPos min, BlockPos max, boolean blue) {
|
||||||
WorldRenderer.drawBoundingBox(min.getX() - 1 / 16d, min.getY() - 1 / 16d, min.getZ() - 1 / 16d,
|
float red = blue ? .8f : 1;
|
||||||
max.getX() + 1 / 16d, max.getY() + 1 / 16d, max.getZ() + 1 / 16d, .3f, .4f, 1, 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
|
@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();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,11 +9,12 @@ import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.gui.BlueprintHotbarOverlay;
|
import com.simibubi.create.gui.BlueprintHotbarOverlay;
|
||||||
import com.simibubi.create.gui.Keyboard;
|
|
||||||
import com.simibubi.create.gui.ToolSelectionScreen;
|
import com.simibubi.create.gui.ToolSelectionScreen;
|
||||||
import com.simibubi.create.item.ItemBlueprint;
|
import com.simibubi.create.item.BlueprintItem;
|
||||||
import com.simibubi.create.networking.PacketNbt;
|
import com.simibubi.create.networking.NbtPacket;
|
||||||
import com.simibubi.create.networking.Packets;
|
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 com.simibubi.create.utility.TessellatorHelper;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
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.KeyInputEvent;
|
||||||
import net.minecraftforge.client.event.InputEvent.MouseInputEvent;
|
import net.minecraftforge.client.event.InputEvent.MouseInputEvent;
|
||||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||||
|
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
||||||
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
||||||
import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent;
|
import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
@ -169,11 +171,13 @@ public class BlueprintHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onRenderOverlay(RenderGameOverlayEvent event) {
|
public static void onRenderOverlay(RenderGameOverlayEvent.Post event) {
|
||||||
if (instance.item != null)
|
|
||||||
instance.overlay.renderOn(instance.slot);
|
|
||||||
if (!instance.active)
|
if (!instance.active)
|
||||||
return;
|
return;
|
||||||
|
if (event.getType() != ElementType.HOTBAR)
|
||||||
|
return;
|
||||||
|
if (instance.item != null)
|
||||||
|
instance.overlay.renderOn(instance.slot);
|
||||||
|
|
||||||
instance.currentTool.getTool().renderOverlay();
|
instance.currentTool.getTool().renderOverlay();
|
||||||
instance.selectionScreen.renderPassive(event.getPartialTicks());
|
instance.selectionScreen.renderPassive(event.getPartialTicks());
|
||||||
|
@ -271,10 +275,10 @@ public class BlueprintHandler {
|
||||||
|
|
||||||
public void sync() {
|
public void sync() {
|
||||||
Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent("Syncing..."), true);
|
Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent("Syncing..."), true);
|
||||||
Packets.channel.sendToServer(new PacketNbt(item, slot));
|
AllPackets.channel.sendToServer(new NbtPacket(item, slot));
|
||||||
|
|
||||||
if (deployed) {
|
if (deployed) {
|
||||||
Template schematic = ItemBlueprint.getSchematic(item);
|
Template schematic = BlueprintItem.getSchematic(item);
|
||||||
|
|
||||||
if (schematic.getSize().equals(BlockPos.ZERO))
|
if (schematic.getSize().equals(BlockPos.ZERO))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -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<Tools> getTools() {
|
|
||||||
List<Tools> tools = new ArrayList<>();
|
|
||||||
Collections.addAll(tools, Move, MoveY, Deploy, Rotate, Flip);
|
|
||||||
return tools;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,16 +1,16 @@
|
||||||
package com.simibubi.create.schematic;
|
package com.simibubi.create.schematic.tools;
|
||||||
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
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.client.renderer.WorldRenderer;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.MutableBoundingBox;
|
import net.minecraft.util.math.MutableBoundingBox;
|
||||||
|
|
||||||
public class SchematicDeployTool extends SchematicPlacementToolBase {
|
public class DeployTool extends PlacementToolBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
|
@ -46,12 +46,12 @@ public class SchematicDeployTool extends SchematicPlacementToolBase {
|
||||||
max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ);
|
max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
GlStateManager.lineWidth(3);
|
GlStateManager.lineWidth(2);
|
||||||
GlStateManager.color4f(.5f, .8f, 1, 1);
|
GlStateManager.color4f(.5f, .8f, 1, 1);
|
||||||
GlStateManager.disableTexture();
|
GlStateManager.disableTexture();
|
||||||
|
|
||||||
WorldRenderer.drawBoundingBox(min.getX() - 1 / 8d, min.getY() + 1 / 16d, min.getZ() - 1 / 8d,
|
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.lineWidth(1);
|
||||||
GlStateManager.enableTexture();
|
GlStateManager.enableTexture();
|
|
@ -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
|
@Override
|
||||||
public void init() {
|
public void init() {
|
|
@ -1,4 +1,4 @@
|
||||||
package com.simibubi.create.schematic;
|
package com.simibubi.create.schematic.tools;
|
||||||
|
|
||||||
public interface ISchematicTool {
|
public interface ISchematicTool {
|
||||||
|
|
|
@ -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
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
|
@ -9,15 +9,22 @@ public class SchematicMoveTool extends SchematicPlacementToolBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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()) {
|
if (schematicSelected && selectedFace.getAxis().isHorizontal()) {
|
||||||
blueprint.moveTo(delta < 0 ? blueprint.anchor.add(selectedFace.getDirectionVec())
|
blueprint.moveTo(delta < 0 ? blueprint.anchor.add(selectedFace.getDirectionVec())
|
||||||
: blueprint.anchor.subtract(selectedFace.getDirectionVec()));
|
: blueprint.anchor.subtract(selectedFace.getDirectionVec()));
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
return super.handleMouseWheel(delta);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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
|
@Override
|
||||||
public void init() {
|
public void init() {
|
|
@ -1,8 +1,8 @@
|
||||||
package com.simibubi.create.schematic;
|
package com.simibubi.create.schematic.tools;
|
||||||
|
|
||||||
import net.minecraft.util.Rotation;
|
import net.minecraft.util.Rotation;
|
||||||
|
|
||||||
public class SchematicRotateTool extends SchematicPlacementToolBase {
|
public class RotateTool extends PlacementToolBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handleMouseWheel(double delta) {
|
public boolean handleMouseWheel(double delta) {
|
|
@ -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.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;
|
||||||
import com.simibubi.create.utility.RaycastHelper.PredicateTraceResult;
|
import com.simibubi.create.utility.RaycastHelper.PredicateTraceResult;
|
||||||
|
|
||||||
|
@ -46,9 +50,10 @@ public abstract class SchematicToolBase implements ISchematicTool {
|
||||||
|
|
||||||
// Select Blueprint
|
// Select Blueprint
|
||||||
if (blueprint.deployed) {
|
if (blueprint.deployed) {
|
||||||
|
BlockPos min = blueprint.getTransformedAnchor();
|
||||||
|
MutableBoundingBox bb = new MutableBoundingBox(min, min.add(blueprint.getTransformedSize()));
|
||||||
PredicateTraceResult result = RaycastHelper.rayTraceUntil(player, 70,
|
PredicateTraceResult result = RaycastHelper.rayTraceUntil(player, 70,
|
||||||
pos -> new MutableBoundingBox(BlockPos.ZERO, blueprint.getTransformedSize())
|
pos -> bb.isVecInside(pos));
|
||||||
.isVecInside(pos.subtract(blueprint.anchor)));
|
|
||||||
schematicSelected = !result.missed();
|
schematicSelected = !result.missed();
|
||||||
selectedFace = schematicSelected ? result.getFacing() : null;
|
selectedFace = schematicSelected ? result.getFacing() : null;
|
||||||
}
|
}
|
||||||
|
@ -80,7 +85,7 @@ public abstract class SchematicToolBase implements ISchematicTool {
|
||||||
public void renderTool() {
|
public void renderTool() {
|
||||||
|
|
||||||
if (blueprint.deployed) {
|
if (blueprint.deployed) {
|
||||||
GlStateManager.lineWidth(5);
|
GlStateManager.lineWidth(2);
|
||||||
GlStateManager.color4f(1, 1, 1, 1);
|
GlStateManager.color4f(1, 1, 1, 1);
|
||||||
GlStateManager.disableTexture();
|
GlStateManager.disableTexture();
|
||||||
|
|
||||||
|
@ -90,21 +95,21 @@ public abstract class SchematicToolBase implements ISchematicTool {
|
||||||
BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ);
|
BlockPos max = new BlockPos(bb.maxX, bb.maxY, bb.maxZ);
|
||||||
|
|
||||||
WorldRenderer.drawBoundingBox(min.getX() - 1 / 8d, min.getY() + 1 / 16d, min.getZ() - 1 / 8d,
|
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 vec = new Vec3d(selectedFace.getDirectionVec());
|
||||||
Vec3d center = new Vec3d(min.add(max)).scale(1 / 2f);
|
Vec3d center = new Vec3d(min.add(max)).scale(1 / 2f);
|
||||||
Vec3d radii = new Vec3d(max.subtract(min)).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))
|
Vec3d onFaceOffset = new Vec3d(1 - Math.abs(vec.x), 1 - Math.abs(vec.y), 1 - Math.abs(vec.z))
|
||||||
.mul(radii);
|
.mul(radii);
|
||||||
Vec3d faceMin = center.add(vec.mul(radii).add(onFaceOffset));
|
Vec3d faceMin = center.add(vec.mul(radii).add(onFaceOffset)).add(vec.scale(1/8f));
|
||||||
Vec3d faceMax = center.add(vec.mul(radii).subtract(onFaceOffset));
|
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(),
|
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);
|
GlStateManager.lineWidth(1);
|
69
src/main/java/com/simibubi/create/schematic/tools/Tools.java
Normal file
69
src/main/java/com/simibubi/create/schematic/tools/Tools.java
Normal file
|
@ -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<String> description;
|
||||||
|
|
||||||
|
private Tools(ISchematicTool tool, String name, ScreenResources icon, List<String> 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<Tools> getTools() {
|
||||||
|
List<Tools> tools = new ArrayList<>();
|
||||||
|
Collections.addAll(tools, Move, MoveY, Deploy, Rotate, Flip);
|
||||||
|
return tools;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package com.simibubi.create.block;
|
package com.simibubi.create.utility;
|
||||||
|
|
||||||
public interface IJustForRendering {
|
public interface IJustForRendering {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.simibubi.create.gui;
|
package com.simibubi.create.utility;
|
||||||
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
|
@ -14,7 +14,7 @@ loaderVersion="[26,)" #mandatory (26 is current forge version)
|
||||||
# The modid of the mod
|
# The modid of the mod
|
||||||
modId="create" #mandatory
|
modId="create" #mandatory
|
||||||
# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it
|
# 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
|
# A display name for the mod
|
||||||
displayName="Create" #mandatory
|
displayName="Create" #mandatory
|
||||||
# A URL to query for updates for this mod. See the JSON update specification <here>
|
# A URL to query for updates for this mod. See the JSON update specification <here>
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 231 B After Width: | Height: | Size: 221 B |
Loading…
Reference in a new issue