diff --git a/gradle.properties b/gradle.properties index 3729aad91..da1c49bc1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.5.0.i +mod_version = 0.5.0.j artifact_minecraft_version = 1.18.2 minecraft_version = 1.18.2 diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 9aac192be..420c74a30 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -67,7 +67,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.5i"; + public static final String VERSION = "0.5j"; public static final Logger LOGGER = LogUtils.getLogger(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchEventHandler.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchEventHandler.java new file mode 100644 index 000000000..906098859 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchEventHandler.java @@ -0,0 +1,56 @@ +package com.simibubi.create.content.contraptions.wrench; + +import com.simibubi.create.AllItems; +import com.simibubi.create.AllTags.AllItemTags; + +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; + +@EventBusSubscriber +public class WrenchEventHandler { + + @SubscribeEvent(priority = EventPriority.HIGH) + public static void useOwnWrenchLogicForCreateBlocks(PlayerInteractEvent.RightClickBlock event) { + Player player = event.getPlayer(); + ItemStack itemStack = event.getItemStack(); + + if (event.isCanceled()) + return; + if (event.getWorld() == null) + return; + if (player == null || !player.mayBuild()) + return; + if (itemStack.isEmpty()) + return; + if (AllItems.WRENCH.isIn(itemStack)) + return; + if (!AllItemTags.WRENCH.matches(itemStack.getItem())) + return; + + BlockState state = event.getWorld() + .getBlockState(event.getPos()); + Block block = state.getBlock(); + + if (!(block instanceof IWrenchable)) + return; + + BlockHitResult hitVec = event.getHitVec(); + UseOnContext context = new UseOnContext(player, event.getHand(), hitVec); + IWrenchable actor = (IWrenchable) block; + + InteractionResult result = + player.isShiftKeyDown() ? actor.onSneakWrenched(state, context) : actor.onWrenched(state, context); + event.setCanceled(true); + event.setCancellationResult(result); + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java index 15213cc70..bcbdb9305 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java @@ -209,7 +209,7 @@ public class EjectorTileEntity extends KineticTileEntity { ; else if (remainder.isEmpty()) depotBehaviour.removeHeldItem(); - else if (!remainder.sameItem(heldItemStack)) + else if (remainder.getCount() != heldItemStack.getCount()) depotBehaviour.heldItem.stack = remainder; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSyncData.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSyncData.java index 54ebac747..50ad64dc3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSyncData.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSyncData.java @@ -117,9 +117,7 @@ public class CarriageSyncData { TrackGraph graph = carriage.train.graph; if (graph == null) { - fallbackLocations = Pair.of(dce.positionAnchor, dce.rotationAnchors); - dce.pointsInitialised = true; - setDirty(true); + updateFallbackLocations(dce); return; } @@ -129,13 +127,19 @@ public class CarriageSyncData { for (boolean first : Iterate.trueAndFalse) { if (!first && !carriage.isOnTwoBogeys()) break; + CarriageBogey bogey = carriage.bogeys.get(first); for (boolean firstPoint : Iterate.trueAndFalse) { TravellingPoint point = bogey.points.get(firstPoint); int index = (first ? 0 : 2) + (firstPoint ? 0 : 1); - Pair, Float> pair = - Pair.of(Couple.create(point.node1.getNetId(), point.node2.getNetId()), (float) point.position); - wheelLocations.set(index, pair); + Couple nodes = Couple.create(point.node1, point.node2); + + if (nodes.either(Objects::isNull)) { + updateFallbackLocations(dce); + return; + } + + wheelLocations.set(index, Pair.of(nodes.map(TrackNode::getNetId), (float) point.position)); } } @@ -143,6 +147,12 @@ public class CarriageSyncData { setDirty(true); } + private void updateFallbackLocations(DimensionalCarriageEntity dce) { + fallbackLocations = Pair.of(dce.positionAnchor, dce.rotationAnchors); + dce.pointsInitialised = true; + setDirty(true); + } + public void apply(CarriageContraptionEntity entity, Carriage carriage) { DimensionalCarriageEntity dce = carriage.getDimensional(entity.level); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java index 355419495..abb9887eb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/management/display/FlapDisplayTileEntity.java @@ -137,7 +137,11 @@ public class FlapDisplayTileEntity extends KineticTileEntity { } public void applyTextManually(int lineIndex, String rawComponentText) { - FlapDisplayLayout layout = getLines().get(lineIndex); + List lines = getLines(); + if (lineIndex >= lines.size()) + return; + + FlapDisplayLayout layout = lines.get(lineIndex); if (!layout.isLayout("Default")) layout.loadDefault(getMaxCharCount()); List sections = layout.getSections();