Logistics and Tooltips
- Added an option to register stairs, slabs and other together with the main Block - Added Skeleton for FlexCrate - Added Skeleton for Redstone Bridge - Added Skeleton for Stockpile Switch - Generalized tooltips between blocks and items - Added more tooltips to existing blocks
|
@ -1,6 +1,7 @@
|
||||||
package com.simibubi.create;
|
package com.simibubi.create;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.block.IWithoutBlockItem;
|
import com.simibubi.create.foundation.block.IWithoutBlockItem;
|
||||||
|
import com.simibubi.create.foundation.block.ProperStairsBlock;
|
||||||
import com.simibubi.create.foundation.block.RenderUtilityAxisBlock;
|
import com.simibubi.create.foundation.block.RenderUtilityAxisBlock;
|
||||||
import com.simibubi.create.foundation.block.RenderUtilityBlock;
|
import com.simibubi.create.foundation.block.RenderUtilityBlock;
|
||||||
import com.simibubi.create.modules.contraptions.base.HalfAxisBlock;
|
import com.simibubi.create.modules.contraptions.base.HalfAxisBlock;
|
||||||
|
@ -24,6 +25,9 @@ import com.simibubi.create.modules.contraptions.relays.EncasedBeltBlock;
|
||||||
import com.simibubi.create.modules.contraptions.relays.GearboxBlock;
|
import com.simibubi.create.modules.contraptions.relays.GearboxBlock;
|
||||||
import com.simibubi.create.modules.contraptions.relays.GearshifterBlock;
|
import com.simibubi.create.modules.contraptions.relays.GearshifterBlock;
|
||||||
import com.simibubi.create.modules.gardens.CocoaLogBlock;
|
import com.simibubi.create.modules.gardens.CocoaLogBlock;
|
||||||
|
import com.simibubi.create.modules.logistics.FlexCrateBlock;
|
||||||
|
import com.simibubi.create.modules.logistics.RedstoneBridgeBlock;
|
||||||
|
import com.simibubi.create.modules.logistics.StockpileSwitchBlock;
|
||||||
import com.simibubi.create.modules.schematics.block.CreativeCrateBlock;
|
import com.simibubi.create.modules.schematics.block.CreativeCrateBlock;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicTableBlock;
|
import com.simibubi.create.modules.schematics.block.SchematicTableBlock;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicannonBlock;
|
import com.simibubi.create.modules.schematics.block.SchematicannonBlock;
|
||||||
|
@ -35,7 +39,11 @@ import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.Block.Properties;
|
import net.minecraft.block.Block.Properties;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.block.FenceBlock;
|
||||||
|
import net.minecraft.block.FenceGateBlock;
|
||||||
import net.minecraft.block.RotatedPillarBlock;
|
import net.minecraft.block.RotatedPillarBlock;
|
||||||
|
import net.minecraft.block.SlabBlock;
|
||||||
|
import net.minecraft.block.WallBlock;
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraftforge.registries.IForgeRegistry;
|
import net.minecraftforge.registries.IForgeRegistry;
|
||||||
|
@ -60,15 +68,15 @@ public enum AllBlocks {
|
||||||
BELT(new BeltBlock()),
|
BELT(new BeltBlock()),
|
||||||
BELT_PULLEY(new RenderUtilityAxisBlock()),
|
BELT_PULLEY(new RenderUtilityAxisBlock()),
|
||||||
BELT_ANIMATION(new RenderUtilityBlock()),
|
BELT_ANIMATION(new RenderUtilityBlock()),
|
||||||
|
|
||||||
MOTOR(new MotorBlock()),
|
MOTOR(new MotorBlock()),
|
||||||
WATER_WHEEL(new WaterWheelBlock()),
|
WATER_WHEEL(new WaterWheelBlock()),
|
||||||
|
|
||||||
TURNTABLE(new TurntableBlock()),
|
TURNTABLE(new TurntableBlock()),
|
||||||
HALF_AXIS(new HalfAxisBlock()),
|
HALF_AXIS(new HalfAxisBlock()),
|
||||||
CRUSHING_WHEEL(new CrushingWheelBlock()),
|
CRUSHING_WHEEL(new CrushingWheelBlock()),
|
||||||
CRUSHING_WHEEL_CONTROLLER(new CrushingWheelControllerBlock()),
|
CRUSHING_WHEEL_CONTROLLER(new CrushingWheelControllerBlock()),
|
||||||
|
|
||||||
MECHANICAL_PISTON(new MechanicalPistonBlock(false)),
|
MECHANICAL_PISTON(new MechanicalPistonBlock(false)),
|
||||||
STICKY_MECHANICAL_PISTON(new MechanicalPistonBlock(true)),
|
STICKY_MECHANICAL_PISTON(new MechanicalPistonBlock(true)),
|
||||||
MECHANICAL_PISTON_HEAD(new MechanicalPistonHeadBlock()),
|
MECHANICAL_PISTON_HEAD(new MechanicalPistonHeadBlock()),
|
||||||
|
@ -76,58 +84,74 @@ public enum AllBlocks {
|
||||||
CONSTRUCT(new ChassisBlock(ChassisBlock.Type.NORMAL)),
|
CONSTRUCT(new ChassisBlock(ChassisBlock.Type.NORMAL)),
|
||||||
STICKY_CONSTRUCT(new ChassisBlock(ChassisBlock.Type.STICKY)),
|
STICKY_CONSTRUCT(new ChassisBlock(ChassisBlock.Type.STICKY)),
|
||||||
RELOCATION_CONSTRUCT(new ChassisBlock(ChassisBlock.Type.RELOCATING)),
|
RELOCATION_CONSTRUCT(new ChassisBlock(ChassisBlock.Type.RELOCATING)),
|
||||||
|
|
||||||
DRILL(new DrillBlock()),
|
DRILL(new DrillBlock()),
|
||||||
HARVESTER(new HarvesterBlock()),
|
HARVESTER(new HarvesterBlock()),
|
||||||
CONTACT(new ContactBlock()),
|
CONTACT(new ContactBlock()),
|
||||||
|
|
||||||
|
// Logistics
|
||||||
|
REDSTONE_BRIDGE(new RedstoneBridgeBlock()),
|
||||||
|
STOCKPILE_SWITCH(new StockpileSwitchBlock()),
|
||||||
|
FLEX_CRATE(new FlexCrateBlock()),
|
||||||
|
|
||||||
// Symmetry
|
// Symmetry
|
||||||
SYMMETRY_PLANE(new PlaneSymmetryBlock()),
|
SYMMETRY_PLANE(new PlaneSymmetryBlock()),
|
||||||
SYMMETRY_CROSSPLANE(new CrossPlaneSymmetryBlock()),
|
SYMMETRY_CROSSPLANE(new CrossPlaneSymmetryBlock()),
|
||||||
SYMMETRY_TRIPLEPLANE(new TriplePlaneSymmetryBlock()),
|
SYMMETRY_TRIPLEPLANE(new TriplePlaneSymmetryBlock()),
|
||||||
|
|
||||||
// Gardens
|
// Gardens
|
||||||
COCOA_LOG(new CocoaLogBlock()),
|
COCOA_LOG(new CocoaLogBlock()),
|
||||||
|
|
||||||
// Palettes
|
// Palettes
|
||||||
ANDESITE_BRICKS(new Block(Properties.from(Blocks.ANDESITE))),
|
ANDESITE_BRICKS(new Block(Properties.from(Blocks.ANDESITE))),
|
||||||
DIORITE_BRICKS(new Block(Properties.from(Blocks.DIORITE))),
|
DIORITE_BRICKS(new Block(Properties.from(Blocks.DIORITE))),
|
||||||
GRANITE_BRICKS(new Block(Properties.from(Blocks.GRANITE))),
|
GRANITE_BRICKS(new Block(Properties.from(Blocks.GRANITE))),
|
||||||
|
|
||||||
GABBRO(new Block(Properties.from(Blocks.ANDESITE))),
|
GABBRO(new Block(Properties.from(Blocks.ANDESITE))),
|
||||||
POLISHED_GABBRO(new Block(Properties.from(GABBRO.block))),
|
POLISHED_GABBRO(new Block(Properties.from(GABBRO.block))),
|
||||||
GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
||||||
PAVED_GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
PAVED_GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
||||||
INDENTED_GABBRO(new Block(Properties.from(GABBRO.block))),
|
INDENTED_GABBRO(new Block(Properties.from(GABBRO.block))),
|
||||||
SLIGHTLY_MOSSY_GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
SLIGHTLY_MOSSY_GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
||||||
MOSSY_GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
MOSSY_GABBRO_BRICKS(new Block(Properties.from(GABBRO.block))),
|
||||||
|
|
||||||
LIMESTONE(new Block(Properties.from(Blocks.SANDSTONE))),
|
LIMESTONE(new Block(Properties.from(Blocks.SANDSTONE))),
|
||||||
POLISHED_LIMESTONE(new Block(Properties.from(LIMESTONE.block))),
|
POLISHED_LIMESTONE(new Block(Properties.from(LIMESTONE.block))),
|
||||||
LIMESTONE_BRICKS(new Block(Properties.from(LIMESTONE.block))),
|
LIMESTONE_BRICKS(new Block(Properties.from(LIMESTONE.block))),
|
||||||
LIMESTONE_PILLAR(new RotatedPillarBlock(Properties.from(LIMESTONE.block))),
|
LIMESTONE_PILLAR(new RotatedPillarBlock(Properties.from(LIMESTONE.block))),
|
||||||
|
|
||||||
QUARTZIORITE(new Block(Properties.from(Blocks.QUARTZ_BLOCK))),
|
QUARTZIORITE(new Block(Properties.from(Blocks.QUARTZ_BLOCK))),
|
||||||
QUARTZIORITE_BRICKS(new Block(Properties.from(QUARTZIORITE.block))),
|
QUARTZIORITE_BRICKS(new Block(Properties.from(QUARTZIORITE.block))),
|
||||||
POLISHED_QUARTZIORITE(new Block(Properties.from(QUARTZIORITE.block))),
|
POLISHED_QUARTZIORITE(new Block(Properties.from(QUARTZIORITE.block))),
|
||||||
|
|
||||||
DOLOMITE(new Block(Properties.from(Blocks.GRANITE))),
|
DOLOMITE(new Block(Properties.from(Blocks.GRANITE))),
|
||||||
DOLOMITE_BRICKS(new Block(Properties.from(DOLOMITE.block))),
|
DOLOMITE_BRICKS(new Block(Properties.from(DOLOMITE.block))),
|
||||||
POLISHED_DOLOMITE(new Block(Properties.from(DOLOMITE.block))),
|
POLISHED_DOLOMITE(new Block(Properties.from(DOLOMITE.block))),
|
||||||
DOLOMITE_PILLAR(new RotatedPillarBlock(Properties.from(DOLOMITE.block))),
|
DOLOMITE_PILLAR(new RotatedPillarBlock(Properties.from(DOLOMITE.block))),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
public Block block;
|
private enum ComesWith {
|
||||||
|
WALL, FENCE, FENCE_GATE, SLAB, STAIRS;
|
||||||
|
}
|
||||||
|
|
||||||
private AllBlocks(Block block) {
|
public Block block;
|
||||||
|
public Block[] alsoRegistered;
|
||||||
|
|
||||||
|
private AllBlocks(Block block, ComesWith... comesWith) {
|
||||||
this.block = block;
|
this.block = block;
|
||||||
this.block.setRegistryName(Create.ID, this.name().toLowerCase());
|
this.block.setRegistryName(Create.ID, this.name().toLowerCase());
|
||||||
|
|
||||||
|
alsoRegistered = new Block[comesWith.length];
|
||||||
|
for (int i = 0; i < comesWith.length; i++)
|
||||||
|
alsoRegistered[i] = makeRelatedBlock(block, comesWith[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerBlocks(IForgeRegistry<Block> registry) {
|
public static void registerBlocks(IForgeRegistry<Block> registry) {
|
||||||
for (AllBlocks block : values()) {
|
for (AllBlocks block : values()) {
|
||||||
registry.register(block.block);
|
registry.register(block.block);
|
||||||
|
for (Block extra : block.alsoRegistered)
|
||||||
|
registry.register(extra);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,11 +160,17 @@ public enum AllBlocks {
|
||||||
if (block.get() instanceof IWithoutBlockItem)
|
if (block.get() instanceof IWithoutBlockItem)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
registry.register(new BlockItem(block.get(), AllItems.standardProperties())
|
registerAsItem(registry, block.get());
|
||||||
.setRegistryName(block.get().getRegistryName()));
|
for (Block extra : block.alsoRegistered)
|
||||||
|
registerAsItem(registry, extra);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void registerAsItem(IForgeRegistry<Item> registry, Block blockIn) {
|
||||||
|
registry.register(
|
||||||
|
new BlockItem(blockIn, AllItems.standardProperties()).setRegistryName(blockIn.getRegistryName()));
|
||||||
|
}
|
||||||
|
|
||||||
public Block get() {
|
public Block get() {
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
@ -149,4 +179,32 @@ public enum AllBlocks {
|
||||||
return state.getBlock() == block;
|
return state.getBlock() == block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Block makeRelatedBlock(Block block, ComesWith feature) {
|
||||||
|
Properties properties = Properties.from(block);
|
||||||
|
Block featured = null;
|
||||||
|
|
||||||
|
switch (feature) {
|
||||||
|
case FENCE:
|
||||||
|
featured = new FenceBlock(properties);
|
||||||
|
break;
|
||||||
|
case SLAB:
|
||||||
|
featured = new SlabBlock(properties);
|
||||||
|
break;
|
||||||
|
case STAIRS:
|
||||||
|
featured = new ProperStairsBlock(block);
|
||||||
|
break;
|
||||||
|
case WALL:
|
||||||
|
featured = new WallBlock(properties);
|
||||||
|
break;
|
||||||
|
case FENCE_GATE:
|
||||||
|
featured = new FenceGateBlock(properties);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return featured.setRegistryName(Create.ID,
|
||||||
|
block.getRegistryName().getPath() + "_" + feature.name().toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package com.simibubi.create;
|
package com.simibubi.create;
|
||||||
|
|
||||||
|
import com.simibubi.create.modules.logistics.FlexCrateContainer;
|
||||||
|
import com.simibubi.create.modules.logistics.FlexCrateScreen;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicTableContainer;
|
import com.simibubi.create.modules.schematics.block.SchematicTableContainer;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicTableScreen;
|
import com.simibubi.create.modules.schematics.block.SchematicTableScreen;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicannonContainer;
|
import com.simibubi.create.modules.schematics.block.SchematicannonContainer;
|
||||||
|
@ -26,6 +28,7 @@ public enum AllContainers {
|
||||||
|
|
||||||
SchematicTable(SchematicTableContainer::new),
|
SchematicTable(SchematicTableContainer::new),
|
||||||
Schematicannon(SchematicannonContainer::new),
|
Schematicannon(SchematicannonContainer::new),
|
||||||
|
FlexCrate(FlexCrateContainer::new),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -50,6 +53,7 @@ public enum AllContainers {
|
||||||
public static void registerScreenFactories() {
|
public static void registerScreenFactories() {
|
||||||
bind(SchematicTable, SchematicTableScreen::new);
|
bind(SchematicTable, SchematicTableScreen::new);
|
||||||
bind(Schematicannon, SchematicannonScreen::new);
|
bind(Schematicannon, SchematicannonScreen::new);
|
||||||
|
bind(FlexCrate, FlexCrateScreen::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
|
|
@ -21,6 +21,9 @@ import com.simibubi.create.modules.contraptions.relays.GearboxTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.relays.GearboxTileEntityRenderer;
|
import com.simibubi.create.modules.contraptions.relays.GearboxTileEntityRenderer;
|
||||||
import com.simibubi.create.modules.contraptions.relays.GearshifterTileEntity;
|
import com.simibubi.create.modules.contraptions.relays.GearshifterTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.relays.GearshifterTileEntityRenderer;
|
import com.simibubi.create.modules.contraptions.relays.GearshifterTileEntityRenderer;
|
||||||
|
import com.simibubi.create.modules.logistics.FlexCrateTileEntity;
|
||||||
|
import com.simibubi.create.modules.logistics.RedstoneBridgeTileEntity;
|
||||||
|
import com.simibubi.create.modules.logistics.StockpileSwitchTileEntity;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicTableTileEntity;
|
import com.simibubi.create.modules.schematics.block.SchematicTableTileEntity;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicannonRenderer;
|
import com.simibubi.create.modules.schematics.block.SchematicannonRenderer;
|
||||||
import com.simibubi.create.modules.schematics.block.SchematicannonTileEntity;
|
import com.simibubi.create.modules.schematics.block.SchematicannonTileEntity;
|
||||||
|
@ -57,6 +60,11 @@ public enum AllTileEntities {
|
||||||
CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER),
|
CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER),
|
||||||
WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL),
|
WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL),
|
||||||
|
|
||||||
|
// Logistics
|
||||||
|
REDSTONE_BRIDGE(RedstoneBridgeTileEntity::new, AllBlocks.REDSTONE_BRIDGE),
|
||||||
|
STOCKPILE_SWITCH(StockpileSwitchTileEntity::new, AllBlocks.STOCKPILE_SWITCH),
|
||||||
|
FLEX_CRATE(FlexCrateTileEntity::new, AllBlocks.FLEX_CRATE),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
private Supplier<? extends TileEntity> supplier;
|
private Supplier<? extends TileEntity> supplier;
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.simibubi.create.foundation.block;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ITooltip;
|
||||||
|
import com.simibubi.create.foundation.utility.TooltipHolder;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
public abstract class InfoBlock extends Block implements ITooltip {
|
||||||
|
|
||||||
|
protected TooltipHolder info;
|
||||||
|
|
||||||
|
public InfoBlock(Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
info = new TooltipHolder(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
||||||
|
ITooltipFlag flagIn) {
|
||||||
|
info.addInformation(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.simibubi.create.foundation.block;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.StairsBlock;
|
||||||
|
|
||||||
|
public class ProperStairsBlock extends StairsBlock {
|
||||||
|
|
||||||
|
public ProperStairsBlock(Block block) {
|
||||||
|
super(block.getDefaultState(), Properties.from(block));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.simibubi.create.foundation.item;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ITooltip;
|
||||||
|
import com.simibubi.create.foundation.utility.TooltipHolder;
|
||||||
|
|
||||||
|
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.world.World;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
public abstract class InfoItem extends Item implements ITooltip {
|
||||||
|
|
||||||
|
protected TooltipHolder info;
|
||||||
|
|
||||||
|
public InfoItem(Properties properties) {
|
||||||
|
super(properties);
|
||||||
|
info = new TooltipHolder(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
|
||||||
|
info.addInformation(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,39 +0,0 @@
|
||||||
package com.simibubi.create.foundation.item;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription;
|
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
|
||||||
|
|
||||||
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.world.World;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
|
||||||
|
|
||||||
public abstract class ItemWithToolTip extends Item {
|
|
||||||
|
|
||||||
protected TooltipCache tooltip;
|
|
||||||
|
|
||||||
public ItemWithToolTip(Properties properties) {
|
|
||||||
super(properties);
|
|
||||||
tooltip = new TooltipCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@OnlyIn(value = Dist.CLIENT)
|
|
||||||
public void addInformation(ItemStack stack, World worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
|
|
||||||
ItemDescription itemDescription = this.tooltip.getOrCreate(this::getDescription);
|
|
||||||
itemDescription.addInformation(tooltip);
|
|
||||||
super.addInformation(stack, worldIn, tooltip, flagIn);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract ItemDescription getDescription();
|
|
||||||
|
|
||||||
protected String h(String s, Palette palette) {
|
|
||||||
return ItemDescription.hightlight(s, palette);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
package com.simibubi.create.foundation.item;
|
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription;
|
|
||||||
|
|
||||||
public class TooltipCache {
|
|
||||||
|
|
||||||
private ItemDescription toolTip;
|
|
||||||
|
|
||||||
public ItemDescription getOrCreate(Supplier<ItemDescription> factory) {
|
|
||||||
if (toolTip == null)
|
|
||||||
toolTip = factory.get();
|
|
||||||
return toolTip;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.simibubi.create.foundation.utility;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
|
||||||
|
public interface ITooltip {
|
||||||
|
|
||||||
|
public ItemDescription getDescription();
|
||||||
|
|
||||||
|
public default String h(String s, Palette palette) {
|
||||||
|
return ItemDescription.hightlight(s, palette);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.simibubi.create.foundation.utility;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
|
||||||
|
public class TooltipHolder {
|
||||||
|
|
||||||
|
private ItemDescription toolTip;
|
||||||
|
|
||||||
|
public TooltipHolder(ITooltip item) {
|
||||||
|
toolTip = item.getDescription();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addInformation(List<ITextComponent> tooltip) {
|
||||||
|
toolTip.addInformation(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,8 +1,9 @@
|
||||||
package com.simibubi.create.modules.contraptions.base;
|
package com.simibubi.create.modules.contraptions.base;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.block.InfoBlock;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
import com.simibubi.create.modules.contraptions.RotationPropagator;
|
import com.simibubi.create.modules.contraptions.RotationPropagator;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.material.PushReaction;
|
import net.minecraft.block.material.PushReaction;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
@ -14,8 +15,10 @@ import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.IWorld;
|
import net.minecraft.world.IWorld;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public abstract class KineticBlock extends Block implements IRotate {
|
public abstract class KineticBlock extends InfoBlock implements IRotate {
|
||||||
|
|
||||||
|
protected static final Palette color = Palette.Red;
|
||||||
|
|
||||||
public KineticBlock(Properties properties) {
|
public KineticBlock(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.simibubi.create.modules.contraptions.generators;
|
package com.simibubi.create.modules.contraptions.generators;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -48,4 +49,13 @@ public class MotorBlock extends HorizontalKineticBlock {
|
||||||
protected boolean hasStaticPart() {
|
protected boolean hasStaticPart() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IToolTip
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color).withSummary("Provides Rotational Power.").withControl("When R-Clicked",
|
||||||
|
"Opens the " + h("Configuration Screen", color)).createTabs();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.simibubi.create.modules.contraptions.generators;
|
package com.simibubi.create.modules.contraptions.generators;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -39,7 +40,7 @@ public class WaterWheelBlock extends HorizontalKineticBlock {
|
||||||
protected boolean hasStaticPart() {
|
protected boolean hasStaticPart() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) {
|
public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) {
|
||||||
for (Direction direction : Direction.values()) {
|
for (Direction direction : Direction.values()) {
|
||||||
|
@ -131,4 +132,10 @@ public class WaterWheelBlock extends HorizontalKineticBlock {
|
||||||
return state.get(HORIZONTAL_FACING).getAxis();
|
return state.get(HORIZONTAL_FACING).getAxis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color).withSummary("Creates Rotational Power from " + h("Water flows", color) + " around it.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.simibubi.create.modules.contraptions.receivers;
|
||||||
import static com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerBlock.VALID;
|
import static com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerBlock.VALID;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
||||||
|
|
||||||
|
@ -166,4 +167,14 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("Using rotational force, two of these Wheels can grind up anything that falls into them.")
|
||||||
|
.withBehaviour("When next other Wheel",
|
||||||
|
"Grinds up Mobs, Players and Items into their components. Wheels have to rotate at exact "
|
||||||
|
+ h("Opposite Speeds", color) + ", dragging inputs into them from above.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.simibubi.create.modules.contraptions.receivers;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.DirectionalKineticBlock;
|
||||||
import com.simibubi.create.modules.contraptions.base.IRotate;
|
import com.simibubi.create.modules.contraptions.base.IRotate;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
||||||
|
@ -167,4 +168,14 @@ public class DrillBlock extends DirectionalKineticBlock implements IHaveMovement
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("Using Rotational Force, this component can break blocks in front of it.")
|
||||||
|
.withBehaviour("When Rotated", h("Breaks blocks", color) + " right in front of it.")
|
||||||
|
.withBehaviour("When being pushed by Mechanical Piston",
|
||||||
|
h("Breaks the Blocks", color) + " it is being pushed into.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,10 @@ package com.simibubi.create.modules.contraptions.receivers;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.foundation.utility.ITooltip;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
import com.simibubi.create.foundation.utility.TooltipHolder;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.IHaveMovementBehavior;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonTileEntity;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonTileEntity;
|
||||||
|
|
||||||
|
@ -12,6 +16,7 @@ import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.CropsBlock;
|
import net.minecraft.block.CropsBlock;
|
||||||
import net.minecraft.block.HorizontalBlock;
|
import net.minecraft.block.HorizontalBlock;
|
||||||
import net.minecraft.block.SugarCaneBlock;
|
import net.minecraft.block.SugarCaneBlock;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.item.ItemEntity;
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
import net.minecraft.item.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -26,20 +31,24 @@ import net.minecraft.util.math.Vec3d;
|
||||||
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.math.shapes.VoxelShapes;
|
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.world.IBlockReader;
|
import net.minecraft.world.IBlockReader;
|
||||||
import net.minecraft.world.IWorldReader;
|
import net.minecraft.world.IWorldReader;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
import net.minecraftforge.common.IPlantable;
|
import net.minecraftforge.common.IPlantable;
|
||||||
|
|
||||||
public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBehavior {
|
public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBehavior, ITooltip {
|
||||||
|
|
||||||
public static final VoxelShape SHAPE_SOUTH = makeCuboidShape(0, 4, 0, 16, 12, 6),
|
public static final VoxelShape SHAPE_SOUTH = makeCuboidShape(0, 4, 0, 16, 12, 6),
|
||||||
SHAPE_NORTH = makeCuboidShape(0, 4, 10, 16, 12, 16), SHAPE_WEST = makeCuboidShape(10, 4, 0, 16, 12, 16),
|
SHAPE_NORTH = makeCuboidShape(0, 4, 10, 16, 12, 16), SHAPE_WEST = makeCuboidShape(10, 4, 0, 16, 12, 16),
|
||||||
SHAPE_EAST = makeCuboidShape(0, 4, 0, 6, 12, 16);
|
SHAPE_EAST = makeCuboidShape(0, 4, 0, 6, 12, 16);
|
||||||
|
|
||||||
|
private TooltipHolder info;
|
||||||
|
|
||||||
public HarvesterBlock() {
|
public HarvesterBlock() {
|
||||||
super(Properties.from(Blocks.IRON_BLOCK));
|
super(Properties.from(Blocks.IRON_BLOCK));
|
||||||
|
info = new TooltipHolder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -199,4 +208,20 @@ public class HarvesterBlock extends HorizontalBlock implements IHaveMovementBeha
|
||||||
return Blocks.AIR.getDefaultState();
|
return Blocks.AIR.getDefaultState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
||||||
|
ITooltipFlag flagIn) {
|
||||||
|
info.addInformation(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette color = Palette.Red;
|
||||||
|
return new ItemDescription(color).withSummary("Ideal for cutting crops using Mechanical Constructs.")
|
||||||
|
.withBehaviour("When pushed by Mechanical Piston",
|
||||||
|
"Cuts Crops to their initial growth state and drops their harvest.")
|
||||||
|
.createTabs();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.simibubi.create.modules.contraptions.receivers;
|
package com.simibubi.create.modules.contraptions.receivers;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import com.simibubi.create.modules.contraptions.base.KineticBlock;
|
import com.simibubi.create.modules.contraptions.base.KineticBlock;
|
||||||
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
|
||||||
|
@ -54,27 +55,27 @@ public class TurntableBlock extends KineticBlock {
|
||||||
float speed = ((KineticTileEntity) te).getSpeed() / 20;
|
float speed = ((KineticTileEntity) te).getSpeed() / 20;
|
||||||
World world = e.getEntityWorld();
|
World world = e.getEntityWorld();
|
||||||
|
|
||||||
if (speed == 0)
|
if (speed == 0)
|
||||||
return;
|
return;
|
||||||
if (e.posY < pos.getY() + .5f)
|
if (e.posY < pos.getY() + .5f)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Vec3d origin = VecHelper.getCenterOf(pos);
|
Vec3d origin = VecHelper.getCenterOf(pos);
|
||||||
Vec3d offset = e.getPositionVec().subtract(origin);
|
Vec3d offset = e.getPositionVec().subtract(origin);
|
||||||
|
|
||||||
if (!world.isRemote && (e instanceof PlayerEntity))
|
if (!world.isRemote && (e instanceof PlayerEntity))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (offset.length() > 1/16f) {
|
if (offset.length() > 1 / 16f) {
|
||||||
offset = VecHelper.rotate(offset, speed / 1f, Axis.Y);
|
offset = VecHelper.rotate(offset, speed / 1f, Axis.Y);
|
||||||
Vec3d movement = origin.add(offset).subtract(e.getPositionVec());
|
Vec3d movement = origin.add(offset).subtract(e.getPositionVec());
|
||||||
e.setMotion(e.getMotion().add(movement));
|
e.setMotion(e.getMotion().add(movement));
|
||||||
e.velocityChanged = true;
|
e.velocityChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (world.isRemote)
|
if (world.isRemote)
|
||||||
return;
|
return;
|
||||||
if ((e instanceof PlayerEntity))
|
if ((e instanceof PlayerEntity))
|
||||||
return;
|
return;
|
||||||
if ((e instanceof LivingEntity)) {
|
if ((e instanceof LivingEntity)) {
|
||||||
float diff = e.getRotationYawHead() - speed;
|
float diff = e.getRotationYawHead() - speed;
|
||||||
|
@ -84,7 +85,6 @@ public class TurntableBlock extends KineticBlock {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
e.rotationYaw -= speed;
|
e.rotationYaw -= speed;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -106,4 +106,10 @@ public class TurntableBlock extends KineticBlock {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color).withSummary("Turns rotational Force into raw Motion Sickness.")
|
||||||
|
.withBehaviour("When Rotated", "Rotates any Entities standing on top.").createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.simibubi.create.modules.contraptions.receivers.constructs;
|
package com.simibubi.create.modules.contraptions.receivers.constructs;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.KineticBlock;
|
import com.simibubi.create.modules.contraptions.base.KineticBlock;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -193,4 +194,12 @@ public class MechanicalPistonBlock extends KineticBlock {
|
||||||
return VoxelShapes.fullCube();
|
return VoxelShapes.fullCube();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("With " + h("Piston Poles", color) + " at the rear, will "
|
||||||
|
+ h("move Attached Structures", color) + " based on its input rotation speed.")
|
||||||
|
.withBehaviour("When Rotated", "Translates attached Structure accordingly.").createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,21 @@
|
||||||
package com.simibubi.create.modules.contraptions.receivers.constructs;
|
package com.simibubi.create.modules.contraptions.receivers.constructs;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||||
|
import com.simibubi.create.foundation.utility.ITooltip;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.TooltipHolder;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock.PistonState;
|
import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalPistonBlock.PistonState;
|
||||||
|
|
||||||
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.BlockItemUseContext;
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.state.properties.BlockStateProperties;
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
import net.minecraft.util.Direction.Axis;
|
||||||
|
@ -16,14 +24,27 @@ 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.math.shapes.VoxelShapes;
|
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
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;
|
||||||
|
|
||||||
public class PistonPoleBlock extends ProperDirectionalBlock {
|
public class PistonPoleBlock extends ProperDirectionalBlock implements ITooltip {
|
||||||
|
|
||||||
|
private TooltipHolder info;
|
||||||
|
|
||||||
public PistonPoleBlock() {
|
public PistonPoleBlock() {
|
||||||
super(Properties.from(Blocks.PISTON_HEAD));
|
super(Properties.from(Blocks.PISTON_HEAD));
|
||||||
setDefaultState(getDefaultState().with(FACING, Direction.UP));
|
setDefaultState(getDefaultState().with(FACING, Direction.UP));
|
||||||
|
info = new TooltipHolder(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
||||||
|
ITooltipFlag flagIn) {
|
||||||
|
info.addInformation(tooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -58,7 +79,7 @@ public class PistonPoleBlock extends ProperDirectionalBlock {
|
||||||
if (pistonHead != null && pistonBase != null
|
if (pistonHead != null && pistonBase != null
|
||||||
&& worldIn.getBlockState(pistonHead).get(BlockStateProperties.FACING) == worldIn
|
&& worldIn.getBlockState(pistonHead).get(BlockStateProperties.FACING) == worldIn
|
||||||
.getBlockState(pistonBase).get(BlockStateProperties.FACING)) {
|
.getBlockState(pistonBase).get(BlockStateProperties.FACING)) {
|
||||||
|
|
||||||
final BlockPos basePos = pistonBase;
|
final BlockPos basePos = pistonBase;
|
||||||
BlockPos.getAllInBox(pistonBase, pistonHead).filter(p -> !p.equals(pos) && !p.equals(basePos))
|
BlockPos.getAllInBox(pistonBase, pistonHead).filter(p -> !p.equals(pos) && !p.equals(basePos))
|
||||||
.forEach(p -> worldIn.destroyBlock(p, !player.isCreative()));
|
.forEach(p -> worldIn.destroyBlock(p, !player.isCreative()));
|
||||||
|
@ -83,10 +104,18 @@ public class PistonPoleBlock extends ProperDirectionalBlock {
|
||||||
|
|
||||||
return VoxelShapes.empty();
|
return VoxelShapes.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
return getDefaultState().with(FACING, context.getFace().getOpposite());
|
return getDefaultState().with(FACING, context.getFace().getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette color = Palette.Red;
|
||||||
|
return new ItemDescription(color).withSummary(
|
||||||
|
"Attach to the back of a " + h("Mechanical Piston", color) + " to increase its extension length.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.simibubi.create.modules.contraptions.relays;
|
package com.simibubi.create.modules.contraptions.relays;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -61,4 +62,10 @@ public class AxisBlock extends RotatedPillarKineticBlock {
|
||||||
return state.get(AXIS);
|
return state.get(AXIS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color).withSummary("A straight connection for rotating blocks along its axis.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.simibubi.create.modules.contraptions.relays;
|
package com.simibubi.create.modules.contraptions.relays;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -28,7 +29,7 @@ public class AxisTunnelBlock extends RotatedPillarKineticBlock {
|
||||||
protected boolean hasStaticPart() {
|
protected boolean hasStaticPart() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PushReaction getPushReaction(BlockState state) {
|
public PushReaction getPushReaction(BlockState state) {
|
||||||
return PushReaction.PUSH_ONLY;
|
return PushReaction.PUSH_ONLY;
|
||||||
|
@ -51,4 +52,10 @@ public class AxisTunnelBlock extends RotatedPillarKineticBlock {
|
||||||
return state.get(AXIS);
|
return state.get(AXIS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("Relays a rotation through its block, similar to an exposed Axle.").createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,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.foundation.block.IWithoutBlockItem;
|
import com.simibubi.create.foundation.block.IWithoutBlockItem;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock;
|
||||||
import com.simibubi.create.modules.contraptions.relays.BeltTileEntity.TransportedEntityInfo;
|
import com.simibubi.create.modules.contraptions.relays.BeltTileEntity.TransportedEntityInfo;
|
||||||
|
|
||||||
|
@ -208,6 +209,8 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt
|
||||||
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||||
if (worldIn.isRemote)
|
if (worldIn.isRemote)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
boolean endWasDestroyed = state.get(PART) == Part.END;
|
||||||
TileEntity tileEntity = worldIn.getTileEntity(pos);
|
TileEntity tileEntity = worldIn.getTileEntity(pos);
|
||||||
if (tileEntity == null)
|
if (tileEntity == null)
|
||||||
return;
|
return;
|
||||||
|
@ -243,6 +246,9 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt
|
||||||
|
|
||||||
if (destroyedBlock.get(PART) == Part.END)
|
if (destroyedBlock.get(PART) == Part.END)
|
||||||
break;
|
break;
|
||||||
|
} else {
|
||||||
|
if (endWasDestroyed)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Slope slope = state.get(SLOPE);
|
Slope slope = state.get(SLOPE);
|
||||||
|
@ -363,5 +369,10 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt
|
||||||
IBooleanFunction.AND));
|
IBooleanFunction.AND));
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.simibubi.create.modules.contraptions.relays;
|
package com.simibubi.create.modules.contraptions.relays;
|
||||||
|
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -39,11 +40,11 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock {
|
||||||
public boolean isSolid(BlockState state) {
|
public boolean isSolid(BlockState state) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
BlockState state = getDefaultState().with(AXIS, context.getNearestLookingDirection().getAxis());
|
BlockState state = getDefaultState().with(AXIS, context.getNearestLookingDirection().getAxis());
|
||||||
|
|
||||||
for (Direction face : Direction.values()) {
|
for (Direction face : Direction.values()) {
|
||||||
BlockState neighbour = context.getWorld().getBlockState(context.getPos().offset(face));
|
BlockState neighbour = context.getWorld().getBlockState(context.getPos().offset(face));
|
||||||
if (neighbour.getBlock() != this || neighbour.get(CONNECTED))
|
if (neighbour.getBlock() != this || neighbour.get(CONNECTED))
|
||||||
|
@ -103,4 +104,13 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("Relays rotation through its block and to an attached Encased Belt.")
|
||||||
|
.withBehaviour("When Attached to other Encased Belt",
|
||||||
|
"Attached Block will have the exact same rotation speed and direction. Attached Belts do not have to face the same way.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.simibubi.create.modules.contraptions.relays;
|
package com.simibubi.create.modules.contraptions.relays;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
import com.simibubi.create.modules.contraptions.base.RotatedPillarKineticBlock;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -21,12 +22,12 @@ public class GearboxBlock extends RotatedPillarKineticBlock {
|
||||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
return new GearboxTileEntity();
|
return new GearboxTileEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PushReaction getPushReaction(BlockState state) {
|
public PushReaction getPushReaction(BlockState state) {
|
||||||
return PushReaction.PUSH_ONLY;
|
return PushReaction.PUSH_ONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// IRotate:
|
// IRotate:
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -39,4 +40,12 @@ public class GearboxBlock extends RotatedPillarKineticBlock {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IToolTip
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("Relays Rotation to Four directions. Reverses straight connections.").createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.AllPackets;
|
import com.simibubi.create.AllPackets;
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||||
import com.simibubi.create.foundation.item.ItemWithToolTip;
|
import com.simibubi.create.foundation.item.InfoItem;
|
||||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription;
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
@ -61,10 +61,11 @@ 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 BuilderGunItem extends ItemWithToolTip {
|
public class BuilderGunItem extends InfoItem {
|
||||||
|
|
||||||
public static enum ComponentTier {
|
public static enum ComponentTier {
|
||||||
None(TextFormatting.DARK_GRAY + "Andesite Alloy"), BlazeBrass(TextFormatting.GOLD + "Blaze Brass"),
|
None(TextFormatting.DARK_GRAY + "Andesite Alloy"),
|
||||||
|
BlazeBrass(TextFormatting.GOLD + "Blaze Brass"),
|
||||||
ChorusChrome(TextFormatting.LIGHT_PURPLE + "Chorus Chrome"),
|
ChorusChrome(TextFormatting.LIGHT_PURPLE + "Chorus Chrome"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
@ -90,7 +91,7 @@ public class BuilderGunItem extends ItemWithToolTip {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ItemDescription getDescription() {
|
public ItemDescription getDescription() {
|
||||||
Palette palette = Palette.Purple;
|
Palette palette = Palette.Purple;
|
||||||
return new ItemDescription(palette).withSummary("Novel gadget for placing or exchanging blocks at a distance.")
|
return new ItemDescription(palette).withSummary("Novel gadget for placing or exchanging blocks at a distance.")
|
||||||
.withControl("L-Click at Block", "Sets blocks placed by the tool to the targeted block.")
|
.withControl("L-Click at Block", "Sets blocks placed by the tool to the targeted block.")
|
||||||
|
|
|
@ -6,7 +6,7 @@ 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.foundation.item.ItemWithToolTip;
|
import com.simibubi.create.foundation.item.InfoItem;
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription;
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
|
||||||
|
@ -31,19 +31,19 @@ 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;
|
||||||
|
|
||||||
public class TreeFertilizerItem extends ItemWithToolTip {
|
public class TreeFertilizerItem extends InfoItem {
|
||||||
|
|
||||||
public TreeFertilizerItem(Properties properties) {
|
public TreeFertilizerItem(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ItemDescription getDescription() {
|
public ItemDescription getDescription() {
|
||||||
return new ItemDescription(Palette.Green)
|
return new ItemDescription(Palette.Green)
|
||||||
.withSummary("A powerful combination of minerals suitable for common tree types.")
|
.withSummary("A powerful combination of minerals suitable for common tree types.")
|
||||||
.withBehaviour("When used on Sapling", "Grows Trees regardless of their spacing Conditions").createTabs();
|
.withBehaviour("When used on Sapling", "Grows Trees regardless of their spacing Conditions").createTabs();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActionResultType onItemUse(ItemUseContext context) {
|
public ActionResultType onItemUse(ItemUseContext context) {
|
||||||
BlockState state = context.getWorld().getBlockState(context.getPos());
|
BlockState state = context.getWorld().getBlockState(context.getPos());
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.block.InfoBlock;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
|
||||||
|
public class FlexCrateBlock extends InfoBlock {
|
||||||
|
|
||||||
|
public FlexCrateBlock() {
|
||||||
|
super(Properties.from(Blocks.ANDESITE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasTileEntity() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return new FlexCrateTileEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette color = Palette.Yellow;
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("This Storage Container allows Manual control over its capacity. Can hold up to "
|
||||||
|
+ h("16 Stacks", color) + " of Items.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllContainers;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.world.ClientWorld;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
|
import net.minecraft.inventory.container.Container;
|
||||||
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
|
||||||
|
public class FlexCrateContainer extends Container {
|
||||||
|
|
||||||
|
private FlexCrateTileEntity te;
|
||||||
|
|
||||||
|
public FlexCrateContainer(int id, PlayerInventory inv, PacketBuffer extraData) {
|
||||||
|
super(AllContainers.SchematicTable.type, id);
|
||||||
|
ClientWorld world = Minecraft.getInstance().world;
|
||||||
|
this.te = (FlexCrateTileEntity) world.getTileEntity(extraData.readBlockPos());
|
||||||
|
this.te.handleUpdateTag(extraData.readCompoundTag());
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
public FlexCrateContainer(int id, PlayerInventory inv, FlexCrateTileEntity te) {
|
||||||
|
super(AllContainers.SchematicTable.type, id);
|
||||||
|
this.te = te;
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canInteractWith(PlayerEntity playerIn) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
|
||||||
|
public class FlexCrateScreen extends AbstractSimiContainerScreen<FlexCrateContainer> {
|
||||||
|
|
||||||
|
public FlexCrateScreen(FlexCrateContainer container, PlayerInventory inv, ITextComponent title) {
|
||||||
|
super(container, inv, title);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.foundation.block.SyncedTileEntity;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
|
import net.minecraft.inventory.container.Container;
|
||||||
|
import net.minecraft.inventory.container.INamedContainerProvider;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.util.text.StringTextComponent;
|
||||||
|
|
||||||
|
public class FlexCrateTileEntity extends SyncedTileEntity implements INamedContainerProvider {
|
||||||
|
|
||||||
|
public FlexCrateTileEntity() {
|
||||||
|
super(AllTileEntities.FLEX_CRATE.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Container createMenu(int id, PlayerInventory inventory, PlayerEntity player) {
|
||||||
|
return new FlexCrateContainer(id, inventory, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ITextComponent getDisplayName() {
|
||||||
|
return new StringTextComponent(getType().getRegistryName().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,134 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||||
|
import com.simibubi.create.foundation.utility.ITooltip;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.TooltipHolder;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.state.BooleanProperty;
|
||||||
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.BlockRenderLayer;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShape;
|
||||||
|
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.IWorldReader;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
public class RedstoneBridgeBlock extends ProperDirectionalBlock implements ITooltip {
|
||||||
|
|
||||||
|
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||||
|
|
||||||
|
public static final VoxelShape UP_SHAPE = makeCuboidShape(2, 0, 2, 14, 3, 14),
|
||||||
|
DOWN_SHAPE = makeCuboidShape(2, 13, 2, 14, 16, 14);
|
||||||
|
|
||||||
|
public static final VoxelShape SOUTH_SHAPE = makeCuboidShape(3, 1, -1, 13, 15, 2),
|
||||||
|
NORTH_SHAPE = makeCuboidShape(3, 1, 14, 13, 15, 17), EAST_SHAPE = makeCuboidShape(-1, 1, 3, 2, 15, 13),
|
||||||
|
WEST_SHAPE = makeCuboidShape(14, 1, 3, 17, 15, 13);
|
||||||
|
|
||||||
|
private TooltipHolder info;
|
||||||
|
|
||||||
|
public RedstoneBridgeBlock() {
|
||||||
|
super(Properties.from(Blocks.DARK_OAK_LOG));
|
||||||
|
info = new TooltipHolder(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||||
|
builder.add(POWERED);
|
||||||
|
super.fillStateContainer(builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasTileEntity(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return new RedstoneBridgeTileEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) {
|
||||||
|
return state.get(FACING) == Direction.UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockRenderLayer getRenderLayer() {
|
||||||
|
return BlockRenderLayer.CUTOUT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) {
|
||||||
|
BlockPos neighbourPos = pos.offset(state.get(FACING).getOpposite());
|
||||||
|
BlockState neighbour = worldIn.getBlockState(neighbourPos);
|
||||||
|
return Block.hasSolidSide(neighbour, worldIn, neighbourPos, state.get(FACING));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
|
BlockState state = getDefaultState();
|
||||||
|
state = state.with(FACING, context.getFace());
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) {
|
||||||
|
Direction facing = state.get(FACING);
|
||||||
|
|
||||||
|
if (facing == Direction.UP)
|
||||||
|
return UP_SHAPE;
|
||||||
|
if (facing == Direction.DOWN)
|
||||||
|
return DOWN_SHAPE;
|
||||||
|
if (facing == Direction.EAST)
|
||||||
|
return EAST_SHAPE;
|
||||||
|
if (facing == Direction.WEST)
|
||||||
|
return WEST_SHAPE;
|
||||||
|
if (facing == Direction.NORTH)
|
||||||
|
return NORTH_SHAPE;
|
||||||
|
if (facing == Direction.SOUTH)
|
||||||
|
return SOUTH_SHAPE;
|
||||||
|
|
||||||
|
return VoxelShapes.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
||||||
|
ITooltipFlag flagIn) {
|
||||||
|
info.addInformation(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette color = Palette.Yellow;
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("Endpoints for " + h("Wireless Redstone", color) + " connections. Can be assigned "
|
||||||
|
+ h("Frequencies", color) + " using any item. Signal can travel distances up to "
|
||||||
|
+ h("128m", color))
|
||||||
|
.withBehaviour("When Powered",
|
||||||
|
"Bridges of the same " + h("Frequency", color) + " will provide a Redstone signal.")
|
||||||
|
.withControl("When R-Clicked with an Item",
|
||||||
|
"Sets the " + h("Frequency", color) + " to that item. A total of "
|
||||||
|
+ h("two different items", color)
|
||||||
|
+ " can be used in combination for defining a Frequency.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.foundation.block.SyncedTileEntity;
|
||||||
|
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
|
||||||
|
public class RedstoneBridgeTileEntity extends SyncedTileEntity {
|
||||||
|
|
||||||
|
public static final int RANGE = 128;
|
||||||
|
|
||||||
|
static Map<Pair<Frequency, Frequency>, List<RedstoneBridgeTileEntity>> connections;
|
||||||
|
|
||||||
|
public static class Frequency {
|
||||||
|
private ItemStack stack;
|
||||||
|
private Item item;
|
||||||
|
private int color;
|
||||||
|
|
||||||
|
public Frequency(ItemStack stack) {
|
||||||
|
this.stack = stack;
|
||||||
|
item = stack.getItem();
|
||||||
|
CompoundNBT displayTag = stack.getChildTag("display");
|
||||||
|
color = displayTag != null && displayTag.contains("color") ? displayTag.getInt("color") : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getStack() {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return item.hashCode() ^ color;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
return obj instanceof Frequency ? ((Frequency) obj).item == item && ((Frequency) obj).color == color
|
||||||
|
: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Frequency frequencyFirst;
|
||||||
|
public Frequency frequencyLast;
|
||||||
|
|
||||||
|
public RedstoneBridgeTileEntity() {
|
||||||
|
super(AllTileEntities.REDSTONE_BRIDGE.type);
|
||||||
|
frequencyFirst = new Frequency(ItemStack.EMPTY);
|
||||||
|
frequencyLast = new Frequency(ItemStack.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoad() {
|
||||||
|
super.onLoad();
|
||||||
|
if (world.isRemote)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Pair<Frequency, Frequency> networkKey = getNetworkKey();
|
||||||
|
List<RedstoneBridgeTileEntity> TEs = connections.getOrDefault(networkKey, new ArrayList<>());
|
||||||
|
TEs.add(this);
|
||||||
|
connections.put(networkKey, TEs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
super.remove();
|
||||||
|
|
||||||
|
Pair<Frequency, Frequency> networkKey = getNetworkKey();
|
||||||
|
List<RedstoneBridgeTileEntity> TEs = connections.get(networkKey);
|
||||||
|
if (TEs != null)
|
||||||
|
TEs.remove(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Pair<Frequency, Frequency> getNetworkKey() {
|
||||||
|
return Pair.of(frequencyFirst, frequencyLast);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompoundNBT write(CompoundNBT compound) {
|
||||||
|
compound.put("FrequencyFirst", frequencyFirst.getStack().write(new CompoundNBT()));
|
||||||
|
compound.put("FrequencyLast", frequencyLast.getStack().write(new CompoundNBT()));
|
||||||
|
return super.write(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(CompoundNBT compound) {
|
||||||
|
frequencyFirst = new Frequency(ItemStack.read(compound.getCompound("FrequencyFirst")));
|
||||||
|
frequencyLast = new Frequency(ItemStack.read(compound.getCompound("FrequencyLast")));
|
||||||
|
super.read(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||||
|
import com.simibubi.create.foundation.utility.ITooltip;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
import com.simibubi.create.foundation.utility.TooltipHolder;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
|
||||||
|
public class StockpileSwitchBlock extends ProperDirectionalBlock implements ITooltip {
|
||||||
|
|
||||||
|
private TooltipHolder info;
|
||||||
|
|
||||||
|
public StockpileSwitchBlock() {
|
||||||
|
super(Properties.from(Blocks.ANDESITE));
|
||||||
|
info = new TooltipHolder(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
||||||
|
ITooltipFlag flagIn) {
|
||||||
|
info.addInformation(tooltip);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasTileEntity() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return new StockpileSwitchTileEntity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette color = Palette.Yellow;
|
||||||
|
return new ItemDescription(color)
|
||||||
|
.withSummary("Toggles a Redstone signal based on the " + h("Storage Space", color)
|
||||||
|
+ " in the attached Container.")
|
||||||
|
.withBehaviour("When below Lower Limit", "Stops providing " + h("Redstone Power", color))
|
||||||
|
.withBehaviour("When above Upper Limit",
|
||||||
|
"Starts providing " + h("Redstone Power", color) + " until Lower Limit is reached again.")
|
||||||
|
.withControl("When R-Clicked", "Opens the " + h("Configuration Screen", color)).createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
public class StockpileSwitchScreen {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.simibubi.create.modules.logistics;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.foundation.block.SyncedTileEntity;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
|
||||||
|
public class StockpileSwitchTileEntity extends SyncedTileEntity {
|
||||||
|
|
||||||
|
private float offWhenAbove;
|
||||||
|
private float onWhenBelow;
|
||||||
|
// private float currentLevel;
|
||||||
|
|
||||||
|
public StockpileSwitchTileEntity() {
|
||||||
|
super(AllTileEntities.STOCKPILE_SWITCH.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(CompoundNBT compound) {
|
||||||
|
|
||||||
|
offWhenAbove = compound.getFloat("OffAbove");
|
||||||
|
onWhenBelow = compound.getFloat("OnBelow");
|
||||||
|
updateCurrentLevel();
|
||||||
|
|
||||||
|
super.read(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompoundNBT write(CompoundNBT compound) {
|
||||||
|
|
||||||
|
compound.putFloat("OffAbove", offWhenAbove);
|
||||||
|
compound.putFloat("OnBelow", onWhenBelow);
|
||||||
|
|
||||||
|
return super.write(compound);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateCurrentLevel() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,59 +1,46 @@
|
||||||
package com.simibubi.create.modules.schematics.block;
|
package com.simibubi.create.modules.schematics.block;
|
||||||
|
|
||||||
import java.util.List;
|
import com.simibubi.create.foundation.block.InfoBlock;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.utility.KeyboardHelper;
|
|
||||||
|
|
||||||
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 InfoBlock {
|
||||||
|
|
||||||
protected static final VoxelShape shape = makeCuboidShape(1, 0, 1, 15, 14, 15);
|
protected static final VoxelShape shape = makeCuboidShape(1, 0, 1, 15, 14, 15);
|
||||||
|
|
||||||
public CreativeCrateBlock() {
|
public CreativeCrateBlock() {
|
||||||
super(Properties.create(Material.WOOD));
|
super(Properties.create(Material.WOOD));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
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 (KeyboardHelper.isKeyDown(KeyboardHelper.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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos,
|
public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos,
|
||||||
ISelectionContext context) {
|
ISelectionContext context) {
|
||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette blue = Palette.Blue;
|
||||||
|
return new ItemDescription(blue)
|
||||||
|
.withSummary("Grants an attached " + h("Schematicannon", blue) + " unlimited access to blocks.")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,10 @@ package com.simibubi.create.modules.schematics.block;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.utility.KeyboardHelper;
|
import com.simibubi.create.foundation.utility.ITooltip;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
import com.simibubi.create.foundation.utility.TooltipHolder;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
@ -20,18 +23,19 @@ 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.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.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
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 implements ITooltip {
|
||||||
|
|
||||||
|
private TooltipHolder info;
|
||||||
|
|
||||||
public SchematicTableBlock() {
|
public SchematicTableBlock() {
|
||||||
super(Properties.from(Blocks.OAK_PLANKS));
|
super(Properties.from(Blocks.OAK_PLANKS));
|
||||||
|
info = new TooltipHolder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -44,17 +48,12 @@ public class SchematicTableBlock extends HorizontalBlock {
|
||||||
public boolean isSolid(BlockState state) {
|
public boolean isSolid(BlockState state) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@OnlyIn(value = Dist.CLIENT)
|
@OnlyIn(value = Dist.CLIENT)
|
||||||
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
||||||
ITooltipFlag flagIn) {
|
ITooltipFlag flagIn) {
|
||||||
if (KeyboardHelper.isKeyDown(KeyboardHelper.LSHIFT)) {
|
info.addInformation(tooltip);
|
||||||
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
|
||||||
|
@ -103,4 +102,12 @@ public class SchematicTableBlock extends HorizontalBlock {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette color = Palette.Blue;
|
||||||
|
return new ItemDescription(color).withSummary("Writes saved Schematics onto an " + h("Empty Schematic", color))
|
||||||
|
.withBehaviour("When given an Empty Schematic", "Uploads the chosen File from your Schematics Folder")
|
||||||
|
.createTabs();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
package com.simibubi.create.modules.schematics.block;
|
package com.simibubi.create.modules.schematics.block;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
import com.simibubi.create.foundation.utility.KeyboardHelper;
|
import com.simibubi.create.foundation.block.InfoBlock;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
|
||||||
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;
|
||||||
|
@ -18,18 +16,13 @@ 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 InfoBlock {
|
||||||
|
|
||||||
public SchematicannonBlock() {
|
public SchematicannonBlock() {
|
||||||
super(Properties.from(Blocks.DISPENSER));
|
super(Properties.from(Blocks.DISPENSER));
|
||||||
|
@ -39,32 +32,19 @@ public class SchematicannonBlock extends Block {
|
||||||
public boolean hasTileEntity(BlockState state) {
|
public boolean hasTileEntity(BlockState state) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
return new SchematicannonTileEntity();
|
return new SchematicannonTileEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@OnlyIn(value = Dist.CLIENT)
|
|
||||||
public void addInformation(ItemStack stack, IBlockReader worldIn, List<ITextComponent> tooltip,
|
|
||||||
ITooltipFlag flagIn) {
|
|
||||||
if (KeyboardHelper.isKeyDown(KeyboardHelper.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) {
|
||||||
((SchematicannonTileEntity) worldIn.getTileEntity(currentPos)).findInventories();
|
((SchematicannonTileEntity) worldIn.getTileEntity(currentPos)).findInventories();
|
||||||
return stateIn;
|
return stateIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSolid(BlockState state) {
|
public boolean isSolid(BlockState state) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -75,25 +55,26 @@ public class SchematicannonBlock extends Block {
|
||||||
((SchematicannonTileEntity) world.getTileEntity(pos)).findInventories();
|
((SchematicannonTileEntity) world.getTileEntity(pos)).findInventories();
|
||||||
super.onNeighborChange(state, world, pos, neighbor);
|
super.onNeighborChange(state, world, pos, neighbor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn,
|
public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn,
|
||||||
BlockRayTraceResult hit) {
|
BlockRayTraceResult hit) {
|
||||||
|
|
||||||
if (worldIn.isRemote) {
|
if (worldIn.isRemote) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
SchematicannonTileEntity te = (SchematicannonTileEntity) worldIn.getTileEntity(pos);
|
SchematicannonTileEntity te = (SchematicannonTileEntity) worldIn.getTileEntity(pos);
|
||||||
if (te != null)
|
if (te != null)
|
||||||
if (AllItems.BLUEPRINT.typeOf(player.getHeldItemMainhand()) && te.inventory.getStackInSlot(0).isEmpty()) {
|
if (AllItems.BLUEPRINT.typeOf(player.getHeldItemMainhand())
|
||||||
|
&& te.inventory.getStackInSlot(0).isEmpty()) {
|
||||||
te.inventory.setStackInSlot(0, player.getHeldItemMainhand());
|
te.inventory.setStackInSlot(0, player.getHeldItemMainhand());
|
||||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY);
|
player.inventory.setInventorySlotContents(player.inventory.currentItem, ItemStack.EMPTY);
|
||||||
}
|
}
|
||||||
NetworkHooks.openGui((ServerPlayerEntity) player, te, te::sendToContainer);
|
NetworkHooks.openGui((ServerPlayerEntity) player, te, te::sendToContainer);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||||
if (worldIn.getTileEntity(pos) == null)
|
if (worldIn.getTileEntity(pos) == null)
|
||||||
|
@ -110,5 +91,12 @@ public class SchematicannonBlock extends Block {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemDescription getDescription() {
|
||||||
|
Palette color = Palette.Blue;
|
||||||
|
return new ItemDescription(color).withSummary("Prints a deployed " + h("Schematic", color)
|
||||||
|
+ "into the world using blocks from inventories placed right next to it.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import com.simibubi.create.AllPackets;
|
import com.simibubi.create.AllPackets;
|
||||||
import com.simibubi.create.foundation.gui.ScreenOpener;
|
import com.simibubi.create.foundation.gui.ScreenOpener;
|
||||||
import com.simibubi.create.foundation.item.ItemWithToolTip;
|
import com.simibubi.create.foundation.item.InfoItem;
|
||||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription;
|
import com.simibubi.create.foundation.utility.ItemDescription;
|
||||||
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
import com.simibubi.create.foundation.utility.ItemDescription.Palette;
|
||||||
|
@ -40,17 +40,17 @@ 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 SymmetryWandItem extends ItemWithToolTip {
|
public class SymmetryWandItem extends InfoItem {
|
||||||
|
|
||||||
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 SymmetryWandItem(Properties properties) {
|
public SymmetryWandItem(Properties properties) {
|
||||||
super(properties.maxStackSize(1));
|
super(properties.maxStackSize(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ItemDescription getDescription() {
|
public ItemDescription getDescription() {
|
||||||
Palette palette = Palette.Purple;
|
Palette palette = Palette.Purple;
|
||||||
return new ItemDescription(palette)
|
return new ItemDescription(palette)
|
||||||
.withSummary("Perfectly mirrors your Block placement across the configured planes.")
|
.withSummary("Perfectly mirrors your Block placement across the configured planes.")
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"powered=false,facing=up": { "model": "create:block/redstone_bridge" },
|
||||||
|
"powered=false,facing=down": { "model": "create:block/redstone_bridge", "x": 180 },
|
||||||
|
"powered=false,facing=south": { "model": "create:block/redstone_bridge_side"},
|
||||||
|
"powered=false,facing=north": { "model": "create:block/redstone_bridge_side", "y": 180 },
|
||||||
|
"powered=false,facing=west": { "model": "create:block/redstone_bridge_side", "y": 90 },
|
||||||
|
"powered=false,facing=east": { "model": "create:block/redstone_bridge_side", "y": 270 },
|
||||||
|
|
||||||
|
"powered=true,facing=up": { "model": "create:block/redstone_bridge_powered" },
|
||||||
|
"powered=true,facing=down": { "model": "create:block/redstone_bridge_powered", "x": 180 },
|
||||||
|
"powered=true,facing=south": { "model": "create:block/redstone_bridge_side_powered"},
|
||||||
|
"powered=true,facing=north": { "model": "create:block/redstone_bridge_side_powered", "y": 180 },
|
||||||
|
"powered=true,facing=west": { "model": "create:block/redstone_bridge_side_powered", "y": 90 },
|
||||||
|
"powered=true,facing=east": { "model": "create:block/redstone_bridge_side_powered", "y": 270 }
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,7 +23,6 @@
|
||||||
"block.create.crushing_wheel": "Crushing Wheel",
|
"block.create.crushing_wheel": "Crushing Wheel",
|
||||||
"block.create.drill": "Mechanical Drill",
|
"block.create.drill": "Mechanical Drill",
|
||||||
"block.create.harvester": "Mechanical Harvester",
|
"block.create.harvester": "Mechanical Harvester",
|
||||||
"block.create.contact": "Redstone Contact",
|
|
||||||
"block.create.water_wheel": "Water Wheel",
|
"block.create.water_wheel": "Water Wheel",
|
||||||
|
|
||||||
"block.create.sticky_mechanical_piston": "Sticky Mechanical Piston",
|
"block.create.sticky_mechanical_piston": "Sticky Mechanical Piston",
|
||||||
|
@ -33,6 +32,11 @@
|
||||||
"block.create.construct": "Movement Chassis",
|
"block.create.construct": "Movement Chassis",
|
||||||
"block.create.sticky_construct": "Sticky Chassis",
|
"block.create.sticky_construct": "Sticky Chassis",
|
||||||
"block.create.relocation_construct": "Relocation Chassis",
|
"block.create.relocation_construct": "Relocation Chassis",
|
||||||
|
|
||||||
|
"block.create.contact": "Redstone Contact",
|
||||||
|
"block.create.redstone_bridge": "Redstone Bridge",
|
||||||
|
"block.create.stockpile_switch": "Stockpile Switch",
|
||||||
|
"block.create.flex_crate": "FlexCrate",
|
||||||
|
|
||||||
"block.create.andesite_bricks": "Andesite Bricks",
|
"block.create.andesite_bricks": "Andesite Bricks",
|
||||||
"block.create.diorite_bricks": "Diorite Bricks",
|
"block.create.diorite_bricks": "Diorite Bricks",
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
{
|
||||||
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
|
"parent": "block/block",
|
||||||
|
"display": {
|
||||||
|
"gui": {
|
||||||
|
"rotation": [ 30, 45, 0 ],
|
||||||
|
"translation": [ 0, 0, 0],
|
||||||
|
"scale":[ 0.625, 0.625, 0.625 ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"textures": {
|
||||||
|
"redstone_antenna": "create:block/redstone_antenna",
|
||||||
|
"redstone_bridge": "create:block/redstone_bridge",
|
||||||
|
"particle": "#redstone_bridge"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Controller",
|
||||||
|
"from": [ 2, 0, 2 ],
|
||||||
|
"to": [ 14, 3, 14 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#redstone_bridge", "uv": [ 12, 0, 15, 12 ], "rotation": 90 },
|
||||||
|
"east": { "texture": "#redstone_bridge", "uv": [ 0, 12, 12, 15 ] },
|
||||||
|
"south": { "texture": "#redstone_bridge", "uv": [ 12, 0, 15, 12 ], "rotation": 90 },
|
||||||
|
"west": { "texture": "#redstone_bridge", "uv": [ 0, 12, 12, 15 ] },
|
||||||
|
"up": { "texture": "#redstone_bridge", "uv": [ 0, 0, 12, 12 ], "rotation": 270 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AntennaX",
|
||||||
|
"from": [ 0, 1, 4 ],
|
||||||
|
"to": [ 3, 11, 5 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] },
|
||||||
|
"south": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] },
|
||||||
|
"down": { "texture": "#redstone_antenna", "uv": [ 0, 9, 3, 10 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AntennaZ",
|
||||||
|
"from": [ 1, 1, 3 ],
|
||||||
|
"to": [ 2, 11, 6 ],
|
||||||
|
"faces": {
|
||||||
|
"east": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] },
|
||||||
|
"west": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AntennaTop",
|
||||||
|
"from": [ 1, 9, 4 ],
|
||||||
|
"to": [ 2, 10, 5 ],
|
||||||
|
"faces": {
|
||||||
|
"up": { "texture": "#redstone_antenna", "uv": [ 1, 1, 2, 2 ] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/redstone_bridge",
|
||||||
|
"textures": {
|
||||||
|
"redstone_antenna": "create:block/redstone_antenna_powered",
|
||||||
|
"redstone_bridge": "create:block/redstone_bridge_powered"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"__comment": "Model generated using MrCrayfish's Model Creator (https://mrcrayfish.com/tools?id=mc)",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"redstone_antenna": "create:block/redstone_antenna",
|
||||||
|
"redstone_bridge_side": "create:block/redstone_bridge_side",
|
||||||
|
"particle": "#redstone_bridge_side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"name": "Controller",
|
||||||
|
"from": [ 3, 1, -1 ],
|
||||||
|
"to": [ 13, 15, 2 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#redstone_bridge_side", "uv": [ 0, 0, 10, 14 ] },
|
||||||
|
"east": { "texture": "#redstone_bridge_side", "uv": [ 10, 0, 13, 14 ] },
|
||||||
|
"south": { "texture": "#redstone_bridge_side", "uv": [ 0, 0, 10, 14 ] },
|
||||||
|
"west": { "texture": "#redstone_bridge_side", "uv": [ 10, 0, 13, 14 ], "rotation": 180 },
|
||||||
|
"up": { "texture": "#redstone_bridge_side", "uv": [ 13, 0, 16, 10 ], "rotation": 270 },
|
||||||
|
"down": { "texture": "#redstone_bridge_side", "uv": [ 13, 0, 16, 10 ], "rotation": 90 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AntennaX",
|
||||||
|
"from": [ 3, 11, 2 ],
|
||||||
|
"to": [ 6, 21, 3 ],
|
||||||
|
"faces": {
|
||||||
|
"north": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] },
|
||||||
|
"south": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] },
|
||||||
|
"down": { "texture": "#redstone_antenna", "uv": [ 0, 9, 3, 10 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AntennaZ",
|
||||||
|
"from": [ 4, 11, 1 ],
|
||||||
|
"to": [ 5, 21, 4 ],
|
||||||
|
"faces": {
|
||||||
|
"east": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] },
|
||||||
|
"west": { "texture": "#redstone_antenna", "uv": [ 0, 0, 3, 10 ] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "AntennaTop",
|
||||||
|
"from": [ 4, 19, 2 ],
|
||||||
|
"to": [ 5, 20, 3 ],
|
||||||
|
"faces": {
|
||||||
|
"up": { "texture": "#redstone_antenna", "uv": [ 1, 1, 2, 2 ] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/redstone_bridge_side",
|
||||||
|
"textures": {
|
||||||
|
"redstone_antenna": "create:block/redstone_antenna_powered",
|
||||||
|
"redstone_bridge_side": "create:block/redstone_bridge_side_powered"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/redstone_bridge_powered"
|
||||||
|
}
|
BIN
src/main/resources/assets/create/textures/block/flex_crate.png
Normal file
After Width: | Height: | Size: 528 B |
After Width: | Height: | Size: 229 B |
After Width: | Height: | Size: 231 B |
After Width: | Height: | Size: 584 B |
After Width: | Height: | Size: 572 B |
After Width: | Height: | Size: 538 B |
After Width: | Height: | Size: 544 B |