Smelty on the Belty

- Encased Fans can smelt items
- Added some random textures for future items
- Moved some event calls
- More Renames
This commit is contained in:
simibubi 2019-09-03 23:03:52 +02:00
parent d20ac87f2c
commit 9420d874fe
39 changed files with 537 additions and 204 deletions

View file

@ -20,7 +20,7 @@ archivesBaseName = 'create'
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'
minecraft { minecraft {
mappings channel: 'snapshot', version: '20190825-1.14.3' mappings channel: 'snapshot', version: '20190902-1.14.3'
runs { runs {
client { client {
@ -58,7 +58,7 @@ minecraft {
} }
dependencies { dependencies {
minecraft 'net.minecraftforge:forge:1.14.4-28.0.55' minecraft 'net.minecraftforge:forge:1.14.4-28.0.83'
} }
jar { jar {

View file

@ -1,18 +1,20 @@
package com.simibubi.create; package com.simibubi.create;
import com.simibubi.create.foundation.item.IItemWithColorHandler;
import com.simibubi.create.modules.contraptions.relays.belt.BeltItem; import com.simibubi.create.modules.contraptions.relays.belt.BeltItem;
import com.simibubi.create.modules.curiosities.ChromaticCompoundCubeItem;
import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem; import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem;
import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItemRenderer; import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItemRenderer;
import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunModel; import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunModel;
import com.simibubi.create.modules.gardens.TreeFertilizerItem; import com.simibubi.create.modules.gardens.TreeFertilizerItem;
import com.simibubi.create.modules.logistics.item.FilterItem; import com.simibubi.create.modules.schematics.item.SchematicAndQuillItem;
import com.simibubi.create.modules.schematics.item.BlueprintAndQuillItem; import com.simibubi.create.modules.schematics.item.SchematicItem;
import com.simibubi.create.modules.schematics.item.BlueprintItem;
import com.simibubi.create.modules.symmetry.SymmetryWandItem; import com.simibubi.create.modules.symmetry.SymmetryWandItem;
import com.simibubi.create.modules.symmetry.client.SymmetryWandItemRenderer; import com.simibubi.create.modules.symmetry.client.SymmetryWandItemRenderer;
import com.simibubi.create.modules.symmetry.client.SymmetryWandModel; import com.simibubi.create.modules.symmetry.client.SymmetryWandModel;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.ItemColors;
import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ModelResourceLocation; import net.minecraft.client.renderer.model.ModelResourceLocation;
import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer; import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer;
@ -40,14 +42,19 @@ public enum AllItems {
ANDESITE_ALLOY_CUBE(new Item(standardProperties())), ANDESITE_ALLOY_CUBE(new Item(standardProperties())),
BLAZE_BRASS_CUBE(new Item(standardProperties())), BLAZE_BRASS_CUBE(new Item(standardProperties())),
CHORUS_CHROME_CUBE(new Item(standardProperties().rarity(Rarity.UNCOMMON))), CHORUS_CHROME_CUBE(new Item(standardProperties().rarity(Rarity.UNCOMMON))),
CHROMATIC_COMPOUND_CUBE(new ChromaticCompoundCubeItem(standardProperties().rarity(Rarity.UNCOMMON))),
SHADOW_STEEL_CUBE(new Item(standardProperties().rarity(Rarity.UNCOMMON))),
BLAZING_PICKAXE(new Item(standardProperties())),
BLAZING_SHOVEL(new Item(standardProperties())),
BLAZING_AXE(new Item(standardProperties())),
BLAZING_SWORD(new Item(standardProperties())),
TREE_FERTILIZER(new TreeFertilizerItem(standardProperties())), TREE_FERTILIZER(new TreeFertilizerItem(standardProperties())),
EMPTY_BLUEPRINT(new Item(standardProperties().maxStackSize(1))), EMPTY_BLUEPRINT(new Item(standardProperties().maxStackSize(1))),
BLUEPRINT_AND_QUILL(new BlueprintAndQuillItem(standardProperties().maxStackSize(1))), BLUEPRINT_AND_QUILL(new SchematicAndQuillItem(standardProperties().maxStackSize(1))),
BLUEPRINT(new BlueprintItem(standardProperties())), BLUEPRINT(new SchematicItem(standardProperties())), BELT_CONNECTOR(new BeltItem(standardProperties())),
BELT_CONNECTOR(new BeltItem(standardProperties())),
FILTER(new FilterItem(standardProperties())),
; ;
@ -86,7 +93,12 @@ public enum AllItems {
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public static void registerColorHandlers() { public static void registerColorHandlers() {
Minecraft.getInstance().getItemColors().register(new FilterItem.Color(), FILTER.item); ItemColors itemColors = Minecraft.getInstance().getItemColors();
for (AllItems item : values()) {
if (item.item instanceof IItemWithColorHandler) {
itemColors.register(((IItemWithColorHandler) item.item).getColorHandler(), item.item);
}
}
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)

View file

@ -6,12 +6,12 @@ import com.simibubi.create.modules.contraptions.relays.belt.BeltItemHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent;
import net.minecraftforge.client.event.InputEvent.KeyInputEvent; import net.minecraftforge.client.event.InputEvent.KeyInputEvent;
import net.minecraftforge.client.event.InputEvent.MouseInputEvent; import net.minecraftforge.client.event.InputEvent.MouseInputEvent;
import net.minecraftforge.client.event.InputEvent.MouseScrollEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.event.TickEvent.ClientTickEvent;
import net.minecraftforge.event.TickEvent.Phase; import net.minecraftforge.event.TickEvent.Phase;
import net.minecraftforge.event.TickEvent.RenderTickEvent; import net.minecraftforge.event.TickEvent.RenderTickEvent;
@ -67,11 +67,10 @@ public class ClientEvents {
CreateClient.schematicHandler.onKeyInput(key, pressed); CreateClient.schematicHandler.onKeyInput(key, pressed);
} }
@SubscribeEvent @SubscribeEvent
// TODO: This is a fabricated event call by ScrollFixer until a proper event public static void onMouseScrolled(MouseScrollEvent event) {
// exists if (Minecraft.getInstance().currentScreen != null)
public static void onMouseScrolled(MouseScrollEvent.Post event) {
if (event.getGui() != null)
return; return;
double delta = event.getScrollDelta(); double delta = event.getScrollDelta();

View file

@ -3,6 +3,8 @@ package com.simibubi.create;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import com.simibubi.create.modules.logistics.FrequencyHandler;
import com.simibubi.create.modules.logistics.InWorldItemProcessingHandler;
import com.simibubi.create.modules.schematics.ServerSchematicLoader; import com.simibubi.create.modules.schematics.ServerSchematicLoader;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -27,10 +29,15 @@ public class Create {
public static Logger logger = LogManager.getLogger(); public static Logger logger = LogManager.getLogger();
public static ItemGroup creativeTab = new CreateItemGroup(); public static ItemGroup creativeTab = new CreateItemGroup();
public static ServerSchematicLoader schematicReceiver; public static ServerSchematicLoader schematicReceiver;
public static FrequencyHandler frequencyHandler;
public static InWorldItemProcessingHandler itemProcessingHandler;
@SubscribeEvent @SubscribeEvent
public static void init(final FMLCommonSetupEvent event) { public static void init(final FMLCommonSetupEvent event) {
schematicReceiver = new ServerSchematicLoader(); schematicReceiver = new ServerSchematicLoader();
itemProcessingHandler = new InWorldItemProcessingHandler();
frequencyHandler = new FrequencyHandler();
AllPackets.registerPackets(); AllPackets.registerPackets();
} }

View file

@ -24,8 +24,7 @@ public class CreateClient {
schematicSender = new ClientSchematicLoader(); schematicSender = new ClientSchematicLoader();
schematicHandler = new SchematicHandler(); schematicHandler = new SchematicHandler();
schematicHologram = new SchematicHologram(); schematicHologram = new SchematicHologram();
schematicAndQuillHandler = new SchematicAndQuillHandler();
ScrollFixer.init();
AllKeys.register(); AllKeys.register();
AllContainers.registerScreenFactories(); AllContainers.registerScreenFactories();

View file

@ -1,7 +1,9 @@
package com.simibubi.create; package com.simibubi.create;
import net.minecraft.world.IWorld;
import net.minecraftforge.event.TickEvent.Phase; import net.minecraftforge.event.TickEvent.Phase;
import net.minecraftforge.event.TickEvent.ServerTickEvent; import net.minecraftforge.event.TickEvent.ServerTickEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
@ -22,5 +24,19 @@ public class Events {
Create.shutdown(); Create.shutdown();
} }
@SubscribeEvent
public static void onLoadWorld(WorldEvent.Load event) {
IWorld world = event.getWorld();
Create.itemProcessingHandler.onLoadWorld(world);
Create.frequencyHandler.onLoadWorld(world);
}
@SubscribeEvent
public static void onUnloadWorld(WorldEvent.Unload event) {
IWorld world = event.getWorld();
Create.itemProcessingHandler.onUnloadWorld(world);
Create.frequencyHandler.onUnloadWorld(world);
}
} }

View file

@ -1,46 +0,0 @@
package com.simibubi.create;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.lwjgl.glfw.GLFW;
import org.lwjgl.glfw.GLFWScrollCallback;
import net.minecraft.client.Minecraft;
import net.minecraft.client.MouseHelper;
import net.minecraftforge.client.event.GuiScreenEvent.MouseScrollEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
public class ScrollFixer {
public static void init() {
try {
MouseHelper mouseHelper = Minecraft.getInstance().mouseHelper;
Method method = ObfuscationReflectionHelper.findMethod(mouseHelper.getClass(), "func_198020_a", Long.TYPE,
Double.TYPE, Double.TYPE);
GLFWScrollCallback callback = new GLFWScrollCallback() {
@Override
public void invoke(long win, double dx, double dy) {
MouseScrollEvent.Post event = new MouseScrollEvent.Post(null, mouseHelper.getMouseX(),
mouseHelper.getMouseY(), dy);
boolean canceled = MinecraftForge.EVENT_BUS.post(event);
if (canceled)
return;
try {
method.invoke(mouseHelper, win, dx, dy);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
};
GLFW.glfwSetScrollCallback(Minecraft.getInstance().mainWindow.getHandle(), callback);
} catch (SecurityException e1) {
e1.printStackTrace();
}
}
}

View file

@ -0,0 +1,9 @@
package com.simibubi.create.foundation.item;
import net.minecraft.client.renderer.color.IItemColor;
public interface IItemWithColorHandler {
public IItemColor getColorHandler();
}

View file

@ -0,0 +1,42 @@
package com.simibubi.create.foundation.utility;
public class ColorHelper {
public static int rainbowColor(int timeStep) {
int localTimeStep = timeStep % 1536;
int timeStepInPhase = localTimeStep % 256;
int phaseBlue = localTimeStep / 256;
int red = colorInPhase(phaseBlue + 4, timeStepInPhase);
int green = colorInPhase(phaseBlue + 2, timeStepInPhase);
int blue = colorInPhase(phaseBlue, timeStepInPhase);
return (red << 16) + (green << 8) + (blue);
}
private static int colorInPhase(int phase, int progress) {
phase = phase % 6;
if (phase <= 1)
return 0;
if (phase == 2)
return progress;
if (phase <= 4)
return 255;
else
return 255 - progress;
}
public static int mixColors(int color1, int color2, float w) {
int r1 = (color1 >> 16);
int g1 = (color1 >> 8) & 0xFF;
int b1 = color1 & 0xFF;
int r2 = (color2 >> 16);
int g2 = (color2 >> 8) & 0xFF;
int b2 = color2 & 0xFF;
int color = ((int) (r1 + (r2 - r1) * w) << 16)
+ ((int) (g1 + (g2 - g1) * w) << 8)
+ (int) (b1 + (b2 - b1) * w);
return color;
}
}

View file

@ -9,8 +9,6 @@ import net.minecraft.block.BlockState;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.Direction.AxisDirection;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockReader; import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
@ -30,29 +28,17 @@ public class EncasedFanBlock extends EncasedShaftBlock implements IWithTileEntit
@Override @Override
public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
Axis axisIn = state.get(AXIS); notifyFanTile(worldIn, pos);
notifyFanTile(worldIn, pos, Direction.getFacingFromAxisDirection(axisIn, AxisDirection.POSITIVE));
notifyFanTile(worldIn, pos, Direction.getFacingFromAxisDirection(axisIn, AxisDirection.NEGATIVE));
} }
@Override @Override
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
boolean isMoving) { boolean isMoving) {
Axis axisIn = state.get(AXIS); notifyFanTile(worldIn, pos);
notifyFanTile(worldIn, pos, Direction.getFacingFromAxisDirection(axisIn, AxisDirection.POSITIVE));
notifyFanTile(worldIn, pos, Direction.getFacingFromAxisDirection(axisIn, AxisDirection.NEGATIVE));
} }
@Override protected void notifyFanTile(IWorld world, BlockPos pos) {
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, withTileEntityDo(world, pos, EncasedFanTileEntity::updateFrontBlock);
BlockPos currentPos, BlockPos facingPos) {
if (facing.getAxis() == stateIn.get(AXIS))
notifyFanTile(worldIn, currentPos, facing);
return stateIn;
}
protected void notifyFanTile(IWorld world, BlockPos pos, Direction facing) {
withTileEntityDo(world, pos, te -> te.setNeighbour(facing, world.getBlockState(pos.offset(facing))));
} }
@Override @Override

View file

@ -14,16 +14,17 @@ import java.util.UUID;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTileEntities; import com.simibubi.create.AllTileEntities;
import com.simibubi.create.Create;
import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.VecHelper;
import com.simibubi.create.modules.contraptions.base.KineticTileEntity; import com.simibubi.create.modules.contraptions.base.KineticTileEntity;
import com.simibubi.create.modules.logistics.InWorldProcessing;
import com.simibubi.create.modules.logistics.InWorldProcessing.Type;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.INBT; import net.minecraft.nbt.INBT;
import net.minecraft.nbt.ListNBT; import net.minecraft.nbt.ListNBT;
@ -35,7 +36,6 @@ import net.minecraft.particles.RedstoneParticleData;
import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.ITickableTileEntity;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.Direction.Axis;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
@ -61,7 +61,6 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
.setFireDamage(); .setFireDamage();
protected BlockState frontBlock; protected BlockState frontBlock;
protected BlockState backBlock;
protected float pushDistance; protected float pushDistance;
protected float pullDistance; protected float pullDistance;
protected float pushForce; protected float pushForce;
@ -70,30 +69,36 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
protected AxisAlignedBB backBB; protected AxisAlignedBB backBB;
protected int blockCheckCooldown; protected int blockCheckCooldown;
protected boolean findLoadedItems; protected boolean findLoadedItems;
protected boolean findFrontBlock;
public List<ProcessedItem> items; public List<ProcessedItem> items;
public class ProcessedItem { public class ProcessedItem {
private UUID loadedUUID; private UUID loadedUUID;
private int loadedTime;
private ItemEntity entity; private ItemEntity entity;
private int processingTimeLeft;
public ProcessedItem(UUID uuid, int timeLeft) { public ProcessedItem(UUID uuid, int timeLeft) {
loadedUUID = uuid; loadedUUID = uuid;
processingTimeLeft = timeLeft; loadedTime = timeLeft;
} }
public ProcessedItem(ItemEntity item) { public ProcessedItem(ItemEntity item) {
entity = item; entity = item;
processingTimeLeft = 100;
} }
public void tick() { public void tick() {
world.addParticle(new RedstoneParticleData(1, 0, 1, 1), entity.posX, entity.posY, entity.posZ, 0, 0, 0); if (world.rand.nextInt(4) == 0) {
processingTimeLeft--; Type processingType = getProcessingType();
if (processingType == Type.BLASTING)
if (processingTimeLeft <= 0) { world.addParticle(ParticleTypes.LARGE_SMOKE, entity.posX, entity.posY + .25f, entity.posZ, 0, 1/16f, 0);
entity.setItem(new ItemStack(Items.COAL)); if (processingType == Type.SMOKING)
world.addParticle(ParticleTypes.CLOUD, entity.posX, entity.posY + .25f, entity.posZ, 0, 1/16f, 0);
} }
if (world.isRemote)
return;
Create.itemProcessingHandler.getProcessing(entity).process(entity);
} }
} }
@ -147,7 +152,8 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
public EncasedFanTileEntity() { public EncasedFanTileEntity() {
super(AllTileEntities.ENCASED_FAN.type); super(AllTileEntities.ENCASED_FAN.type);
blockCheckCooldown = BLOCK_CHECK_UPDATE_DELAY; blockCheckCooldown = -1;
findFrontBlock = true;
frontBB = new AxisAlignedBB(0, 0, 0, 0, 0, 0); frontBB = new AxisAlignedBB(0, 0, 0, 0, 0, 0);
backBB = new AxisAlignedBB(0, 0, 0, 0, 0, 0); backBB = new AxisAlignedBB(0, 0, 0, 0, 0, 0);
items = new ArrayList<>(); items = new ArrayList<>();
@ -185,32 +191,25 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
@Override @Override
public void readClientUpdate(CompoundNBT tag) { public void readClientUpdate(CompoundNBT tag) {
super.readClientUpdate(tag); super.readClientUpdate(tag);
pushDistance = tag.getFloat("PushDistance"); updateFrontBlock();
pullDistance = tag.getFloat("PullDistance");
pushForce = tag.getFloat("PushForce");
pullForce = tag.getFloat("PullForce");
updateBothNeighbours();
updateBBs(); updateBBs();
} }
@Override @Override
public CompoundNBT writeToClient(CompoundNBT tag) { public CompoundNBT writeToClient(CompoundNBT tag) {
super.writeToClient(tag); super.writeToClient(tag);
tag.putFloat("PushDistance", pushDistance);
tag.putFloat("PullDistance", pullDistance);
tag.putFloat("PushForce", pushForce);
tag.putFloat("PullForce", pullForce);
return tag; return tag;
} }
@Override
public void onLoad() {
blockCheckCooldown = 0;
}
@Override @Override
public void read(CompoundNBT compound) { public void read(CompoundNBT compound) {
super.read(compound); super.read(compound);
pushDistance = compound.getFloat("PushDistance");
pullDistance = compound.getFloat("PullDistance");
pushForce = compound.getFloat("PushForce");
pullForce = compound.getFloat("PullForce");
ListNBT itemsNBT = compound.getList("Items", 10); ListNBT itemsNBT = compound.getList("Items", 10);
items.clear(); items.clear();
for (INBT iNBT : itemsNBT) { for (INBT iNBT : itemsNBT) {
@ -222,11 +221,16 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
@Override @Override
public CompoundNBT write(CompoundNBT compound) { public CompoundNBT write(CompoundNBT compound) {
compound.putFloat("PushDistance", pushDistance);
compound.putFloat("PullDistance", pullDistance);
compound.putFloat("PushForce", pushForce);
compound.putFloat("PullForce", pullForce);
ListNBT itemsNBT = new ListNBT(); ListNBT itemsNBT = new ListNBT();
for (ProcessedItem item : items) { for (ProcessedItem item : items) {
CompoundNBT itemNBT = new CompoundNBT(); CompoundNBT itemNBT = new CompoundNBT();
itemNBT.put("UUID", NBTUtil.writeUniqueId(item.entity.getUniqueID())); itemNBT.put("UUID", NBTUtil.writeUniqueId(item.entity.getUniqueID()));
itemNBT.putInt("TimeLeft", item.processingTimeLeft); itemNBT.putInt("TimeLeft", Create.itemProcessingHandler.getProcessing(item.entity).timeRemaining);
itemsNBT.add(itemNBT); itemsNBT.add(itemNBT);
} }
compound.put("Items", itemsNBT); compound.put("Items", itemsNBT);
@ -287,23 +291,15 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
.grow(.25f); .grow(.25f);
} }
public void updateBothNeighbours() { public void updateFrontBlock() {
Axis axis = getBlockState().get(AXIS); Direction facing = getAirFlow();
Direction frontFacing = Direction.getFacingFromAxis(POSITIVE, axis); if (facing == null) {
Direction backFacing = Direction.getFacingFromAxis(NEGATIVE, axis); frontBlock = Blocks.AIR.getDefaultState();
BlockPos front = pos.offset(frontFacing); return;
BlockPos back = pos.offset(backFacing); }
BlockPos front = pos.offset(facing);
if (world.isBlockPresent(front)) if (world.isBlockPresent(front))
setNeighbour(frontFacing, world.getBlockState(front)); frontBlock = world.getBlockState(front);
if (world.isBlockPresent(back))
setNeighbour(backFacing, world.getBlockState(back));
}
public void setNeighbour(Direction direction, BlockState neighbourState) {
if (direction.getAxisDirection() == NEGATIVE)
backBlock = neighbourState;
else
frontBlock = neighbourState;
updateReachAndForce(); updateReachAndForce();
} }
@ -316,6 +312,7 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
@Override @Override
public void onSpeedChanged() { public void onSpeedChanged() {
updateReachAndForce(); updateReachAndForce();
updateFrontBlock();
} }
@Override @Override
@ -335,59 +332,124 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
entity.setFire(10); entity.setFire(10);
entity.attackEntityFrom(damageSourceLava, 8); entity.attackEntityFrom(damageSourceLava, 8);
} }
} else {
boolean missing = true;
for (ProcessedItem processed : items) {
if (processed.entity == entity) {
processed.tick();
missing = false;
break;
}
}
if (missing) {
items.add(new ProcessedItem((ItemEntity) entity));
}
} }
} }
for (Entity entity : world.getEntitiesWithinAABBExcludingEntity(null, backBB)) { for (Entity entity : world.getEntitiesWithinAABBExcludingEntity(null, backBB)) {
moveEntity(entity, false); moveEntity(entity, false);
} }
if (findFrontBlock) {
findFrontBlock = false;
updateFrontBlock();
}
if (!world.isRemote && blockCheckCooldown-- <= 0) {
blockCheckCooldown = BLOCK_CHECK_UPDATE_DELAY;
updateReachAndForce();
}
updateProcessedItems(frontEntities);
if (world.isRemote) { if (world.isRemote) {
makeParticles(); makeParticles();
return; return;
} }
if (blockCheckCooldown-- <= 0) { discoverEntitiesAfterLoad(frontEntities);
blockCheckCooldown = BLOCK_CHECK_UPDATE_DELAY; }
updateReachAndForce();
public void updateProcessedItems(List<Entity> frontEntities) {
ArrayList<ProcessedItem> prevItems = new ArrayList<>(items);
Iterator<ProcessedItem> itemIter = prevItems.iterator();
if (canProcess()) {
while (itemIter.hasNext()) {
Iterator<Entity> entityIter = frontEntities.iterator();
ProcessedItem item = itemIter.next();
while (entityIter.hasNext()) {
Entity e = entityIter.next();
if (!(e instanceof ItemEntity)) {
entityIter.remove();
continue;
}
if (item.entity == e && e.isAlive()) {
item.tick();
entityIter.remove();
itemIter.remove();
continue;
}
}
}
// Add remaining
for (Entity entity : frontEntities) {
if (entity instanceof ItemEntity && canProcess((ItemEntity) entity)) {
items.add(new ProcessedItem((ItemEntity) entity));
if (!world.isRemote)
Create.itemProcessingHandler.startProcessing((ItemEntity) entity,
new InWorldProcessing(getProcessingType(), 100));
}
}
} }
for (ProcessedItem lostItem : prevItems) {
items.remove(lostItem);
if (!world.isRemote && lostItem.entity != null)
Create.itemProcessingHandler.stopProcessing(lostItem.entity);
}
}
public void discoverEntitiesAfterLoad(List<Entity> frontEntities) {
if (findLoadedItems) { if (findLoadedItems) {
findLoadedItems = false; findLoadedItems = false;
Iterator<ProcessedItem> iterator = items.iterator(); Iterator<ProcessedItem> iterator = items.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
ProcessedItem item = iterator.next(); ProcessedItem item = iterator.next();
if (!canProcess())
iterator.remove();
for (Entity entity : frontEntities) { for (Entity entity : frontEntities) {
if (!(entity instanceof ItemEntity)) if (!(entity instanceof ItemEntity))
continue; continue;
if (entity.getUniqueID().equals(item.loadedUUID)) if (entity.getUniqueID().equals(item.loadedUUID)) {
item.entity = (ItemEntity) entity; item.entity = (ItemEntity) entity;
if (!world.isRemote && canProcess((ItemEntity) entity))
Create.itemProcessingHandler.startProcessing((ItemEntity) entity,
new InWorldProcessing(getProcessingType(), item.loadedTime));
}
} }
if (item.entity == null) if (item.entity == null)
iterator.remove(); iterator.remove();
} }
} }
}
Iterator<ProcessedItem> iterator = items.iterator(); protected boolean canProcess() {
while (iterator.hasNext()) return getProcessingType() != null;
if (!iterator.next().entity.getBoundingBox().intersects(frontBB)) }
iterator.remove();
protected boolean canProcess(ItemEntity entity) {
return canProcess() && new InWorldProcessing(getProcessingType(), 0).canProcess(entity);
}
protected InWorldProcessing.Type getProcessingType() {
Block block = frontBlock.getBlock();
if (block == Blocks.FIRE)
return Type.SMOKING;
if (block == Blocks.WATER)
return Type.SPLASHING;
if (block == Blocks.LAVA)
return Type.BLASTING;
return null;
} }
protected void moveEntity(Entity entity, boolean push) { protected void moveEntity(Entity entity, boolean push) {
if ((entity instanceof ItemEntity) && AllBlocks.BELT.typeOf(world.getBlockState(entity.getPosition()))) { if ((entity instanceof ItemEntity) && AllBlocks.BELT.typeOf(world.getBlockState(entity.getPosition()))
&& getAirFlow() != Direction.UP) {
return; return;
} }
@ -416,13 +478,6 @@ public class EncasedFanTileEntity extends KineticTileEntity implements ITickable
fx.render(directionVec, true, this); fx.render(directionVec, true, this);
} }
} }
if (backBlock != null && !hasFx) {
if (effects.containsKey(backBlock.getBlock())) {
hasFx = true;
for (FanEffect fx : effects.get(backBlock.getBlock()))
fx.render(directionVec, true, this);
}
}
if (!hasFx) if (!hasFx)
for (FanEffect fx : effects.get(Blocks.AIR)) for (FanEffect fx : effects.get(Blocks.AIR))

View file

@ -0,0 +1,43 @@
package com.simibubi.create.modules.curiosities;
import com.simibubi.create.foundation.item.IItemWithColorHandler;
import com.simibubi.create.foundation.utility.ColorHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.client.model.animation.Animation;
public class ChromaticCompoundCubeItem extends Item implements IItemWithColorHandler {
public static class Color implements IItemColor {
@Override
public int getColor(ItemStack stack, int layer) {
Minecraft mc = Minecraft.getInstance();
float pt = mc.getRenderPartialTicks();
float progress = (float) ((mc.player.getYaw(pt)) / 180 * Math.PI)
+ (Animation.getWorldTime(mc.world, pt) * 1f);
if (layer == 0)
return ColorHelper.mixColors(0xDDDDDD, 0xDDDDDD, ((float) MathHelper.sin(progress) + 1) / 2);
if (layer == 1)
return ColorHelper.mixColors(0x72A498, 0xB9D6FF,
((float) MathHelper.sin((float) (progress + Math.PI)) + 1) / 2);
if (layer == 2)
return ColorHelper.mixColors(0x5082CE, 0x91C5B7,
((float) MathHelper.sin((float) (progress * 1.5f + Math.PI)) + 1) / 2);
return 0;
}
}
public ChromaticCompoundCubeItem(Properties properties) {
super(properties);
}
@Override
public IItemColor getColorHandler() {
return new Color();
}
}

View file

@ -13,11 +13,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.world.IWorld; import net.minecraft.world.IWorld;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@EventBusSubscriber
public class FrequencyHandler { public class FrequencyHandler {
public static final int RANGE = 128; public static final int RANGE = 128;
@ -53,23 +49,21 @@ public class FrequencyHandler {
} }
@SubscribeEvent public void onLoadWorld(IWorld world) {
public static void onLoadWorld(WorldEvent.Load event) { connections.put(world, new HashMap<>());
connections.put(event.getWorld(), new HashMap<>()); Create.logger.info("Prepared network space for " + world.getDimension().getType().getRegistryName());
Create.logger.info("Prepared network space for " + event.getWorld().getDimension().getType().getRegistryName());
} }
@SubscribeEvent public void onUnloadWorld(IWorld world) {
public static void onUnloadWorld(WorldEvent.Unload event) { connections.remove(world);
connections.remove(event.getWorld()); Create.logger.info("Removed network space for " + world.getDimension().getType().getRegistryName());
Create.logger.info("Removed network space for " + event.getWorld().getDimension().getType().getRegistryName());
} }
private static Pair<Frequency, Frequency> getNetworkKey(IHaveWireless actor) { private static Pair<Frequency, Frequency> getNetworkKey(IHaveWireless actor) {
return Pair.of(actor.getFrequencyFirst(), actor.getFrequencyLast()); return Pair.of(actor.getFrequencyFirst(), actor.getFrequencyLast());
} }
public static List<IHaveWireless> getNetworkOf(IHaveWireless actor) { public List<IHaveWireless> getNetworkOf(IHaveWireless actor) {
Map<Pair<Frequency, Frequency>, List<IHaveWireless>> networksInWorld = networksIn(actor.getWorld()); Map<Pair<Frequency, Frequency>, List<IHaveWireless>> networksInWorld = networksIn(actor.getWorld());
Pair<Frequency, Frequency> key = getNetworkKey(actor); Pair<Frequency, Frequency> key = getNetworkKey(actor);
if (!networksInWorld.containsKey(key)) if (!networksInWorld.containsKey(key))
@ -77,12 +71,12 @@ public class FrequencyHandler {
return networksInWorld.get(key); return networksInWorld.get(key);
} }
public static void addToNetwork(IHaveWireless actor) { public void addToNetwork(IHaveWireless actor) {
getNetworkOf(actor).add(actor); getNetworkOf(actor).add(actor);
updateNetworkOf(actor); updateNetworkOf(actor);
} }
public static void removeFromNetwork(IHaveWireless actor) { public void removeFromNetwork(IHaveWireless actor) {
List<IHaveWireless> network = getNetworkOf(actor); List<IHaveWireless> network = getNetworkOf(actor);
network.remove(actor); network.remove(actor);
if (network.isEmpty()) { if (network.isEmpty()) {
@ -92,7 +86,7 @@ public class FrequencyHandler {
updateNetworkOf(actor); updateNetworkOf(actor);
} }
public static void updateNetworkOf(IHaveWireless actor) { public void updateNetworkOf(IHaveWireless actor) {
List<IHaveWireless> network = getNetworkOf(actor); List<IHaveWireless> network = getNetworkOf(actor);
boolean powered = false; boolean powered = false;
@ -119,7 +113,7 @@ public class FrequencyHandler {
return from.getPos().withinDistance(to.getPos(), RANGE); return from.getPos().withinDistance(to.getPos(), RANGE);
} }
public static Map<Pair<Frequency, Frequency>, List<IHaveWireless>> networksIn(IWorld world) { public Map<Pair<Frequency, Frequency>, List<IHaveWireless>> networksIn(IWorld world) {
if (!connections.containsKey(world)) { if (!connections.containsKey(world)) {
Create.logger.warn( Create.logger.warn(
"Tried to Access unprepared network space of " + world.getDimension().getType().getRegistryName()); "Tried to Access unprepared network space of " + world.getDimension().getType().getRegistryName());

View file

@ -1,5 +1,6 @@
package com.simibubi.create.modules.logistics; package com.simibubi.create.modules.logistics;
import com.simibubi.create.Create;
import com.simibubi.create.modules.logistics.FrequencyHandler.Frequency; import com.simibubi.create.modules.logistics.FrequencyHandler.Frequency;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -17,5 +18,8 @@ public interface IHaveWireless {
public default boolean isLoaded() { public default boolean isLoaded() {
return getWorld().isBlockPresent(getPos()); return getWorld().isBlockPresent(getPos());
} }
default FrequencyHandler getHandler() {
return Create.frequencyHandler;
}
} }

View file

@ -1,10 +1,12 @@
package com.simibubi.create.modules.logistics; package com.simibubi.create.modules.logistics;
import com.simibubi.create.Create;
public interface ITransmitWireless extends IHaveWireless { public interface ITransmitWireless extends IHaveWireless {
public boolean getSignal(); public boolean getSignal();
public default void notifySignalChange() { public default void notifySignalChange() {
FrequencyHandler.updateNetworkOf(this); Create.frequencyHandler.updateNetworkOf(this);
} }
} }

View file

@ -0,0 +1,52 @@
package com.simibubi.create.modules.logistics;
import java.util.HashMap;
import java.util.Map;
import com.simibubi.create.Create;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.world.IWorld;
public class InWorldItemProcessingHandler {
private Map<IWorld, Map<ItemEntity, InWorldProcessing>> items = new HashMap<>();
public void onLoadWorld(IWorld world) {
items.put(world, new HashMap<>());
Create.logger.info("Prepared Item Processing space for " + world.getDimension().getType().getRegistryName());
}
public void onUnloadWorld(IWorld world) {
items.remove(world);
Create.logger.info("Removed Item Processing space for " + world.getDimension().getType().getRegistryName());
}
public void startProcessing(ItemEntity entity, InWorldProcessing processing) {
Map<ItemEntity, InWorldProcessing> itemsInWorld = items.get(entity.world);
if (itemsInWorld.containsKey(entity) && processing.type == itemsInWorld.get(entity).type) {
itemsInWorld.get(entity).processorCount++;
} else {
itemsInWorld.put(entity, processing);
}
}
public void stopProcessing(ItemEntity entity) {
Map<ItemEntity, InWorldProcessing> itemsInWorld = items.get(entity.world);
if (!itemsInWorld.containsKey(entity))
return;
InWorldProcessing processing = itemsInWorld.get(entity);
processing.processorCount--;
if (processing.processorCount == 0)
itemsInWorld.remove(entity);
}
public InWorldProcessing getProcessing(ItemEntity entity) {
Map<ItemEntity, InWorldProcessing> itemsInWorld = items.get(entity.world);
if (!itemsInWorld.containsKey(entity))
return null;
return itemsInWorld.get(entity);
}
}

View file

@ -0,0 +1,115 @@
package com.simibubi.create.modules.logistics;
import java.util.Optional;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.crafting.BlastingRecipe;
import net.minecraft.item.crafting.FurnaceRecipe;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.item.crafting.SmokingRecipe;
import net.minecraft.tileentity.BlastFurnaceTileEntity;
import net.minecraft.tileentity.FurnaceTileEntity;
import net.minecraft.tileentity.SmokerTileEntity;
import net.minecraft.world.World;
public class InWorldProcessing {
public enum Type {
SMOKING, BLASTING, SPLASHING
}
public Type type;
public int processorCount;
public int timeRemaining;
public InWorldProcessing(Type type, int time) {
this.timeRemaining = time;
this.type = type;
processorCount = 1;
}
public boolean canProcess(ItemEntity entity) {
World world = entity.world;
if (type == Type.BLASTING) {
return true;
}
if (type == Type.SMOKING) {
SmokerTileEntity smoker = new SmokerTileEntity();
smoker.setWorld(world);
smoker.setInventorySlotContents(0, entity.getItem());
Optional<SmokingRecipe> recipe = world.getRecipeManager().getRecipe(IRecipeType.SMOKING, smoker, world);
return recipe.isPresent();
}
if (type == Type.SPLASHING) {
return false;
}
return false;
}
public void process(ItemEntity entity) {
timeRemaining--;
if (timeRemaining != 0) {
return;
}
World world = entity.world;
if (type == Type.SPLASHING) {
return;
}
SmokerTileEntity smoker = new SmokerTileEntity();
smoker.setWorld(world);
smoker.setInventorySlotContents(0, entity.getItem());
Optional<SmokingRecipe> smokingRecipe = world.getRecipeManager().getRecipe(IRecipeType.SMOKING, smoker, world);
if (type == Type.BLASTING) {
FurnaceTileEntity furnace = new FurnaceTileEntity();
furnace.setWorld(world);
furnace.setInventorySlotContents(0, entity.getItem());
Optional<FurnaceRecipe> smeltingRecipe = world.getRecipeManager().getRecipe(IRecipeType.SMELTING, furnace,
world);
if (!smokingRecipe.isPresent()) {
if (smeltingRecipe.isPresent()) {
applyRecipeOn(entity, smeltingRecipe.get());
return;
}
BlastFurnaceTileEntity blastFurnace = new BlastFurnaceTileEntity();
blastFurnace.setWorld(world);
blastFurnace.setInventorySlotContents(0, entity.getItem());
Optional<BlastingRecipe> blastingRecipe = world.getRecipeManager().getRecipe(IRecipeType.BLASTING,
blastFurnace, world);
if (blastingRecipe.isPresent()) {
applyRecipeOn(entity, blastingRecipe.get());
return;
}
}
entity.setItem(new ItemStack(Items.GUNPOWDER, entity.getItem().getCount()));
return;
}
if (type == Type.SMOKING && smokingRecipe.isPresent()) {
applyRecipeOn(entity, smokingRecipe.get());
return;
}
}
public void applyRecipeOn(ItemEntity entity, IRecipe<?> recipe) {
ItemStack out = recipe.getRecipeOutput().copy();
out.setCount(entity.getItem().getCount());
entity.setItem(out);
}
}

View file

@ -1,7 +1,6 @@
package com.simibubi.create.modules.logistics.block; package com.simibubi.create.modules.logistics.block;
import com.simibubi.create.foundation.block.SyncedTileEntity; import com.simibubi.create.foundation.block.SyncedTileEntity;
import com.simibubi.create.modules.logistics.FrequencyHandler;
import com.simibubi.create.modules.logistics.FrequencyHandler.Frequency; import com.simibubi.create.modules.logistics.FrequencyHandler.Frequency;
import com.simibubi.create.modules.logistics.IHaveWireless; import com.simibubi.create.modules.logistics.IHaveWireless;
@ -25,7 +24,7 @@ public abstract class LinkedTileEntity extends SyncedTileEntity implements IHave
super.onLoad(); super.onLoad();
if (world.isRemote) if (world.isRemote)
return; return;
FrequencyHandler.addToNetwork(this); getHandler().addToNetwork(this);
} }
@Override @Override
@ -33,7 +32,7 @@ public abstract class LinkedTileEntity extends SyncedTileEntity implements IHave
super.remove(); super.remove();
if (world.isRemote) if (world.isRemote)
return; return;
FrequencyHandler.removeFromNetwork(this); getHandler().removeFromNetwork(this);
} }
@Override @Override
@ -59,7 +58,7 @@ public abstract class LinkedTileEntity extends SyncedTileEntity implements IHave
|| !ItemStack.areItemStackTagsEqual(stack, toCompare); || !ItemStack.areItemStackTagsEqual(stack, toCompare);
if (changed) if (changed)
FrequencyHandler.removeFromNetwork(this); getHandler().removeFromNetwork(this);
if (first) if (first)
frequencyFirst = new Frequency(stack); frequencyFirst = new Frequency(stack);
@ -70,7 +69,7 @@ public abstract class LinkedTileEntity extends SyncedTileEntity implements IHave
return; return;
sendData(); sendData();
FrequencyHandler.addToNetwork(this); getHandler().addToNetwork(this);
} }
@Override @Override

View file

@ -19,7 +19,7 @@ import com.simibubi.create.Create;
import com.simibubi.create.foundation.type.DimensionPos; import com.simibubi.create.foundation.type.DimensionPos;
import com.simibubi.create.foundation.utility.FilesHelper; import com.simibubi.create.foundation.utility.FilesHelper;
import com.simibubi.create.modules.schematics.block.SchematicTableTileEntity; import com.simibubi.create.modules.schematics.block.SchematicTableTileEntity;
import com.simibubi.create.modules.schematics.item.BlueprintItem; import com.simibubi.create.modules.schematics.item.SchematicItem;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
@ -226,7 +226,7 @@ public class ServerSchematicLoader {
tileEntity.finishUpload(); tileEntity.finishUpload();
tileEntity.inventory.setStackInSlot(0, ItemStack.EMPTY); tileEntity.inventory.setStackInSlot(0, ItemStack.EMPTY);
tileEntity.inventory.setStackInSlot(1, tileEntity.inventory.setStackInSlot(1,
BlueprintItem.create(schematic, player.getName().getFormattedText())); SchematicItem.create(schematic, player.getName().getFormattedText()));
} catch (IOException e) { } catch (IOException e) {
Create.logger.error("Exception Thrown when finishing Upload: " + playerSchematicId); Create.logger.error("Exception Thrown when finishing Upload: " + playerSchematicId);

View file

@ -11,7 +11,7 @@ import com.simibubi.create.foundation.block.SyncedTileEntity;
import com.simibubi.create.foundation.type.Cuboid; import com.simibubi.create.foundation.type.Cuboid;
import com.simibubi.create.modules.schematics.MaterialChecklist; import com.simibubi.create.modules.schematics.MaterialChecklist;
import com.simibubi.create.modules.schematics.SchematicWorld; import com.simibubi.create.modules.schematics.SchematicWorld;
import com.simibubi.create.modules.schematics.item.BlueprintItem; import com.simibubi.create.modules.schematics.item.SchematicItem;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
@ -515,7 +515,7 @@ public class SchematicannonTileEntity extends SyncedTileEntity implements ITicka
} }
// Load blocks into reader // Load blocks into reader
Template activeTemplate = BlueprintItem.getSchematic(blueprint); Template activeTemplate = SchematicItem.getSchematic(blueprint);
BlockPos anchor = NBTUtil.readBlockPos(blueprint.getTag().getCompound("Anchor")); BlockPos anchor = NBTUtil.readBlockPos(blueprint.getTag().getCompound("Anchor"));
if (activeTemplate.getSize().equals(BlockPos.ZERO)) { if (activeTemplate.getSize().equals(BlockPos.ZERO)) {
@ -534,7 +534,7 @@ public class SchematicannonTileEntity extends SyncedTileEntity implements ITicka
schematicAnchor = anchor; schematicAnchor = anchor;
blockReader = new SchematicWorld(new HashMap<>(), new Cuboid(), schematicAnchor); blockReader = new SchematicWorld(new HashMap<>(), new Cuboid(), schematicAnchor);
activeTemplate.addBlocksToWorld(blockReader, schematicAnchor, BlueprintItem.getSettings(blueprint)); activeTemplate.addBlocksToWorld(blockReader, schematicAnchor, SchematicItem.getSettings(blueprint));
schematicLoaded = true; schematicLoaded = true;
state = State.PAUSED; state = State.PAUSED;
statusMsg = "Ready"; statusMsg = "Ready";

View file

@ -13,7 +13,7 @@ import com.simibubi.create.foundation.type.Cuboid;
import com.simibubi.create.foundation.utility.TessellatorHelper; import com.simibubi.create.foundation.utility.TessellatorHelper;
import com.simibubi.create.modules.schematics.SchematicWorld; import com.simibubi.create.modules.schematics.SchematicWorld;
import com.simibubi.create.modules.schematics.client.tools.Tools; import com.simibubi.create.modules.schematics.client.tools.Tools;
import com.simibubi.create.modules.schematics.item.BlueprintItem; import com.simibubi.create.modules.schematics.item.SchematicItem;
import com.simibubi.create.modules.schematics.packet.SchematicPlacePacket; import com.simibubi.create.modules.schematics.packet.SchematicPlacePacket;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -198,7 +198,7 @@ public class SchematicHandler {
AllPackets.channel.sendToServer(new NbtPacket(item, slot)); AllPackets.channel.sendToServer(new NbtPacket(item, slot));
if (deployed) { if (deployed) {
Template schematic = BlueprintItem.getSchematic(item); Template schematic = SchematicItem.getSchematic(item);
if (schematic.getSize().equals(BlockPos.ZERO)) if (schematic.getSize().equals(BlockPos.ZERO))
return; return;

View file

@ -12,9 +12,9 @@ import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
public class BlueprintAndQuillItem extends Item { public class SchematicAndQuillItem extends Item {
public BlueprintAndQuillItem(Properties properties) { public SchematicAndQuillItem(Properties properties) {
super(properties); super(properties);
} }

View file

@ -39,9 +39,9 @@ import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.common.thread.SidedThreadGroups; import net.minecraftforge.fml.common.thread.SidedThreadGroups;
public class BlueprintItem extends Item { public class SchematicItem extends Item {
public BlueprintItem(Properties properties) { public SchematicItem(Properties properties) {
super(properties.maxStackSize(1)); super(properties.maxStackSize(1));
} }
@ -59,7 +59,7 @@ public class BlueprintItem extends Item {
writeSize(blueprint); writeSize(blueprint);
blueprint.setDisplayName(new StringTextComponent(TextFormatting.RESET + "" + TextFormatting.WHITE blueprint.setDisplayName(new StringTextComponent(TextFormatting.RESET + "" + TextFormatting.WHITE
+ "Blueprint (" + TextFormatting.GOLD + schematic + TextFormatting.WHITE + ")")); + "Schematic (" + TextFormatting.GOLD + schematic + TextFormatting.WHITE + ")"));
return blueprint; return blueprint;
} }

View file

@ -3,7 +3,7 @@ package com.simibubi.create.modules.schematics.packet;
import java.util.function.Supplier; import java.util.function.Supplier;
import com.simibubi.create.foundation.packet.SimplePacketBase; import com.simibubi.create.foundation.packet.SimplePacketBase;
import com.simibubi.create.modules.schematics.item.BlueprintItem; import com.simibubi.create.modules.schematics.item.SchematicItem;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -31,9 +31,9 @@ public class SchematicPlacePacket extends SimplePacketBase {
public void handle(Supplier<Context> context) { public void handle(Supplier<Context> context) {
context.get().enqueueWork(() -> { context.get().enqueueWork(() -> {
ServerPlayerEntity player = context.get().getSender(); ServerPlayerEntity player = context.get().getSender();
Template t = BlueprintItem.getSchematic(stack); Template t = SchematicItem.getSchematic(stack);
t.addBlocksToWorld(player.getServerWorld(), NBTUtil.readBlockPos(stack.getTag().getCompound("Anchor")), t.addBlocksToWorld(player.getServerWorld(), NBTUtil.readBlockPos(stack.getTag().getCompound("Anchor")),
BlueprintItem.getSettings(stack)); SchematicItem.getSettings(stack));
}); });
context.get().setPacketHandled(true); context.get().setPacketHandled(true);
} }

View file

@ -6,11 +6,18 @@
"item.create.andesite_alloy_cube": "Andesite Alloy", "item.create.andesite_alloy_cube": "Andesite Alloy",
"item.create.blaze_brass_cube": "Blaze Brass", "item.create.blaze_brass_cube": "Blaze Brass",
"item.create.chorus_chrome_cube": "Chorus Chrome", "item.create.chorus_chrome_cube": "Chorus Chrome",
"item.create.chromatic_compound_cube": "Chromatic Compound",
"item.create.shadow_steel_cube": "Shadow Steel",
"item.create.blueprint_and_quill": "Schematic and Quill", "item.create.blueprint_and_quill": "Schematic and Quill",
"item.create.blueprint": "Schematic", "item.create.blueprint": "Schematic",
"item.create.belt_connector": "Mechanical Belt", "item.create.belt_connector": "Mechanical Belt",
"item.create.filter": "Filter", "item.create.filter": "Filter",
"item.create.blazing_pickaxe": "Blazing Pickaxe",
"item.create.blazing_shovel": "Blazing Shovel",
"item.create.blazing_axe": "Blazing Axe",
"item.create.blazing_sword": "Blazing Longsword",
"block.create.cogwheel": "Cogwheel", "block.create.cogwheel": "Cogwheel",
"block.create.large_cogwheel": "Large Cogwheel", "block.create.large_cogwheel": "Large Cogwheel",
"block.create.turntable": "Turntable", "block.create.turntable": "Turntable",

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "create:item/blazing_axe"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "create:item/blazing_pickaxe"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "create:item/blazing_shovel"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "create:item/blazing_sword"
}
}

View file

@ -0,0 +1,8 @@
{
"parent": "item/generated",
"textures": {
"layer0": "create:item/chromatic_compound_0",
"layer1": "create:item/chromatic_compound_1",
"layer2": "create:item/chromatic_compound_2"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "create:item/shadow_steel_cube"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B