diff --git a/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java index c01819b59..e68589a8f 100644 --- a/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java +++ b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java @@ -399,10 +399,12 @@ public class PlayerLocal extends Player { } if (i > 0 && stat.isAchievement()) { Achievement achievement = (Achievement) stat; - if (!this.mc.statsCounter.isUnlocked(achievement)) { - this.mc.guiToasts.addToast(new AchievementToast(achievement, false)); + if (achievement.parent == null || this.mc.statsCounter.isUnlocked(achievement.parent)) { + if (!this.mc.statsCounter.isUnlocked(achievement)) { + this.mc.guiToasts.addToast(new AchievementToast(achievement, false)); + } + this.mc.statsCounter.add(stat, i); } - this.mc.statsCounter.add(stat, i); } else { this.mc.statsCounter.add(stat, i); } diff --git a/game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java index 7fe5970c6..fe7d2dbb7 100644 --- a/game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java +++ b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java @@ -340,9 +340,10 @@ public abstract class ScreenContainerAbstract extends Screen { super.mouseReleased(mx, my, buttonNum); } - protected int[] creativeSlotArgs(Slot slot, int amount) { + protected int[] creativeSlotArgs(@NotNull Slot slot, int amount) { ItemStack stack = slot.getItemStack(); - return new int[]{slot.index, amount, stack != null ? stack.itemID : 0, stack != null ? stack.getMetadata() : 0}; + int catalogIndex = slot instanceof SlotCreative creativeSlot ? MenuInventoryCreative.getCreativeItemIndex(creativeSlot.item) : -1; + return new int[]{slot.index, amount, stack != null ? stack.itemID : 0, stack != null ? stack.getMetadata() : 0, catalogIndex}; } protected int[] hotbarSwapArgs(int slotId, int hotbarSlotNumber) { diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericPiston.java b/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericPiston.java index b1bc6e2c9..1ddcf0479 100644 --- a/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericPiston.java +++ b/game/client/src/main/java/net/minecraft/client/render/block/model/generic/BlockModelGenericPiston.java @@ -46,7 +46,7 @@ public class BlockModelGenericPiston extends BlockModelGen @Override public @NotNull StaticBlockModel getModelFromData(int data) { - return (/*noCulling || */PistonCommon.IS_EXTENDED.bool(data)) + return (/*noCulling || */PistonCommon.isExtended(data)) ? this.extended : super.getModelFromData(data); } diff --git a/game/core/src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java index d7ec1a765..2f903e673 100644 --- a/game/core/src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java +++ b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java @@ -115,7 +115,7 @@ public class StatsCounter { } public boolean canUnlock(Achievement achievement) { - return achievement.parent == null || isUnlocked(achievement.parent) || isUnlocked(achievement); + return achievement.parent == null || isUnlocked(achievement.parent); } public int readStat(@Nullable Stat stat) { diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockLogicRepeater.java b/game/core/src/main/java/net/minecraft/core/block/BlockLogicRepeater.java index 49d86f1cc..a1ffa0ac5 100644 --- a/game/core/src/main/java/net/minecraft/core/block/BlockLogicRepeater.java +++ b/game/core/src/main/java/net/minecraft/core/block/BlockLogicRepeater.java @@ -89,11 +89,11 @@ public class BlockLogicRepeater extends BlockLogic implements ISupportable, Bloc } else if (!this.isRepeaterPowered) { world.setBlockTypeDataRaw(tilePos, Blocks.REPEATER_ACTIVE, meta); world.markBlockNeedsUpdate(tilePos); - world.notifyBlocksInCapsuleOfNeighborChange(side.opposite(), tilePos, Blocks.REPEATER_IDLE); if (!powered) { int tickDelay = (meta & MASK_TICK_DELAY) >> 2; world.scheduleBlockUpdate(tilePos, Blocks.REPEATER_ACTIVE, tickDelayMap[tickDelay] * 2); } + world.notifyBlocksInCapsuleOfNeighborChange(side.opposite(), tilePos, Blocks.REPEATER_IDLE); } } diff --git a/game/core/src/main/java/net/minecraft/core/block/piston/PistonCommon.java b/game/core/src/main/java/net/minecraft/core/block/piston/PistonCommon.java index 5c49d260f..511d23392 100644 --- a/game/core/src/main/java/net/minecraft/core/block/piston/PistonCommon.java +++ b/game/core/src/main/java/net/minecraft/core/block/piston/PistonCommon.java @@ -15,7 +15,7 @@ import net.minecraft.core.world.pos.TilePos; import net.minecraft.core.world.pos.TilePosc; /** - * NOTE: this class should only be accessed after the Blocks clinit logic is complete, i.e. + * NOTE: this class should only be accessed after the Blocks clinit logic is complete, i.e. * not from within BlockLogic constructors! */ public abstract class PistonCommon { @@ -24,6 +24,7 @@ public abstract class PistonCommon { public static final PackedField DIRECTION = new PackedField(0, 3); public static final PackedField TYPE = new PackedField(3, 2); public static final PackedField IS_EXTENDED = new PackedField(6, 1); + public static final PackedField LEGACY_EXTENDED = new PackedField(3, 1); public static final PackedField NEW_FORMAT_SIGNATURE = new PackedField(7, 1); @@ -117,10 +118,15 @@ public abstract class PistonCommon { if (newBaseData == baseData) return newBaseData; world.setBlockData(basePos, newBaseData); - return baseData; + return newBaseData; } + // TODO proper chunk load conversion for pistons from 7.3_04 to ~8.0 + // was set aside for the time being due to release window public static int validateBaseData(int data, @NotNull BlockLogicPistonBase base) { + if (!NEW_FORMAT_SIGNATURE.bool(data)) { + data = IS_EXTENDED.set(DIRECTION.set(0, DIRECTION.get(data)), LEGACY_EXTENDED.get(data)); + } data = TYPE.set(data, base.typeId); data = NEW_FORMAT_SIGNATURE.set(data, 1); if (DIRECTION.get(data) > 5) data = DIRECTION.set(data, 0); @@ -128,6 +134,12 @@ public abstract class PistonCommon { return data; } + public static boolean isExtended(int baseData) { + return (NEW_FORMAT_SIGNATURE.bool(baseData)) + ? IS_EXTENDED.bool(baseData) + : LEGACY_EXTENDED.bool(baseData); + } + public static int getValidatedBaseData(@NotNull WorldSource world, @NotNull TilePosc pos, @NotNull BlockLogicPistonBase base) { return validateBaseData(world.getBlockData(pos), base); } diff --git a/game/core/src/main/java/net/minecraft/core/current/wire/WireConnectionManager.java b/game/core/src/main/java/net/minecraft/core/current/wire/WireConnectionManager.java index 12ba77d71..d82b7752a 100644 --- a/game/core/src/main/java/net/minecraft/core/current/wire/WireConnectionManager.java +++ b/game/core/src/main/java/net/minecraft/core/current/wire/WireConnectionManager.java @@ -68,8 +68,7 @@ public class WireConnectionManager { Node ownerUp = nodes.getNeighbor(owner, Directions.UP); boolean aboveIsConductor = ownerUp.isConductor(); - // Check if the block directly above the bottom wire is an open conduit facing down - boolean aboveIsOpenDown = isConduitOpenTowards(ownerUp, Directions.DOWN); + boolean aboveIsConduit = ownerUp.state.is(Blocks.CONDUIT); for (int iDir = 0; iDir < Directions.HORIZONTAL.length; iDir++) { Node neighbor = nodes.getNeighbor(owner, iDir); @@ -100,7 +99,7 @@ public class WireConnectionManager { //looking upwards logic boolean blockedUp = aboveIsConductor || - aboveIsOpenDown || + aboveIsConduit || isConduitOpenTowards(neighbor, iOppDir); if (!blockedUp) { diff --git a/game/core/src/main/java/net/minecraft/core/entity/EntityItem.java b/game/core/src/main/java/net/minecraft/core/entity/EntityItem.java index 8ff78129c..552eacf7e 100644 --- a/game/core/src/main/java/net/minecraft/core/entity/EntityItem.java +++ b/game/core/src/main/java/net/minecraft/core/entity/EntityItem.java @@ -72,6 +72,7 @@ public class EntityItem extends Entity public EntityItem(@NotNull World world, double x, double y, double z, @NotNull ItemStack itemstack) { super(world); + this.sendAdditionalData = true; this.age = 0; this.health = 8; this.bobOffset = (float)(Math.random() * Math.PI * 2D); @@ -99,6 +100,7 @@ public class EntityItem extends Entity public EntityItem(World world) { super(world); + this.sendAdditionalData = true; this.age = 0; this.health = 5; this.bobOffset = (float)(Math.random() * Math.PI * 2D); diff --git a/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java index 57a3f5d05..018ecb2f6 100644 --- a/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java +++ b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java @@ -325,7 +325,7 @@ public abstract class MenuAbstract }else { ItemStack sourceStack = stackInSlot; if(slot instanceof SlotCreative) { - sourceStack = args.length >= 4 ? MenuInventoryCreative.getValidCreativeItem(args[2], args[3]) : null; + sourceStack = args.length >= 4 ? MenuInventoryCreative.getValidCreativeItem(args[2], args[3], args.length >= 5 ? args[4] : -1) : null; if(sourceStack == null && args.length >= 4 && args[2] != 0) { LOGGER.warn("Player {} requested item {}:{} which the creative menu does not offer!", player.username, args[2], args[3]); } @@ -500,7 +500,7 @@ public abstract class MenuAbstract ItemStack slotStack; if(slot instanceof SlotCreative) { - slotStack = args.length >= 4 ? MenuInventoryCreative.getValidCreativeItem(args[2], args[3]) : null; + slotStack = args.length >= 4 ? MenuInventoryCreative.getValidCreativeItem(args[2], args[3], args.length >= 5 ? args[4] : -1) : null; } else { assert slot != null; slotStack = slot.getItemStack(); diff --git a/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java index a202503be..ac0d0d37c 100644 --- a/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java +++ b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java @@ -5,6 +5,7 @@ import net.minecraft.core.lang.I18n; import net.minecraft.core.player.inventory.CreativeMenuContents; import net.minecraft.core.player.inventory.container.ContainerInventory; import net.minecraft.core.player.inventory.slot.SlotCreative; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -155,6 +156,19 @@ public class MenuInventoryCreative extends MenuInventory public static ItemStack getValidCreativeItem(int itemId, int metadata) { + return getValidCreativeItem(itemId, metadata, -1); + } + + public static @Nullable ItemStack getValidCreativeItem(int itemId, int metadata, int catalogIndex) { + + if (catalogIndex >= 0 && catalogIndex < creativeContents.size()) + { + ItemStack stack = creativeContents.get(catalogIndex); + if (stack != null && stack.itemID == itemId && stack.getMetadata() == metadata) + { + return stack.copy(); + } + } for (ItemStack stack : creativeContents) { if (stack != null && stack.itemID == itemId && stack.getMetadata() == metadata) @@ -165,6 +179,19 @@ public class MenuInventoryCreative extends MenuInventory return null; } + public static int getCreativeItemIndex(ItemStack stack) + { + if (stack == null) return -1; + for (int i = 0; i < creativeContents.size(); i++) + { + if (creativeContents.get(i) == stack) + { + return i; + } + } + return -1; + } + public String getSearchText(){ return searchText; } diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherScatterBonePile.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherScatterBonePile.java index 09a03abe6..c98a5d793 100644 --- a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherScatterBonePile.java +++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherScatterBonePile.java @@ -21,6 +21,11 @@ public final class WorldFeatureNetherScatterBonePile extends WorldFeatureNetherS return false; } final Block surface = world.getBlockType(this.scratchGround); + + if(surface == Blocks.OBSIDIAN){ + return false; + } + if (isAshSurface(surface) && random.nextInt(BONE_PILE_ON_ASH_ONE_IN) != 0) { return false; }