Skip to content

Commit

Permalink
Fixed boats not saving their sails properly.
Browse files Browse the repository at this point in the history
  • Loading branch information
Vazkii committed Jan 3, 2017
1 parent 8984518 commit 36ade51
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 24 deletions.
4 changes: 4 additions & 0 deletions src/main/java/vazkii/quark/base/asm/ASMHooks.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ public static void applyRuneColor(float f1, float f2, float f3, float f4) {

// ===== BOAT SAILS ===== //

public static void onBoatUpdate(EntityBoat boat) {
BoatSails.onBoatUpdate(boat);
}

public static void dropBoatBanner(EntityBoat boat) {
BoatSails.dropBoatBanner(boat);
}
Expand Down
23 changes: 20 additions & 3 deletions src/main/java/vazkii/quark/base/asm/ClassTransformer.java
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,10 @@ private static byte[] transformLayerArmorBase(byte[] basicClass) {

private static byte[] transformEntityBoat(byte[] basicClass) {
log("Transforming EntityBoat");
MethodSignature sig = new MethodSignature("attackEntityFrom", "func_76986_a", "a", "(Lnet/minecraft/util/DamageSource;F)Z");

return transform(basicClass, Pair.of(sig, combine(
MethodSignature sig1 = new MethodSignature("attackEntityFrom", "func_76986_a", "a", "(Lnet/minecraft/util/DamageSource;F)Z");
MethodSignature sig2 = new MethodSignature("onUpdate", "func_70071_h_", "A", "()V");

byte[] transClass = transform(basicClass, Pair.of(sig1, combine(
(AbstractInsnNode node) -> { // Filter
return node.getOpcode() == Opcodes.POP;
},
Expand All @@ -203,6 +204,22 @@ private static byte[] transformEntityBoat(byte[] basicClass) {
method.instructions.insertBefore(node, newInstructions);
return true;
})));

transClass = transform(transClass, Pair.of(sig2, combine(
(AbstractInsnNode node) -> { // Filter
return true;
},
(MethodNode method, AbstractInsnNode node) -> { // Action
InsnList newInstructions = new InsnList();

newInstructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
newInstructions.add(new MethodInsnNode(Opcodes.INVOKESTATIC, ASM_HOOKS, "onBoatUpdate", "(Lnet/minecraft/entity/item/EntityBoat;)V"));

method.instructions.insertBefore(node, newInstructions);
return true;
})));

return transClass;
}

private static byte[] transformRenderBoat(byte[] basicClass) {
Expand Down
16 changes: 8 additions & 8 deletions src/main/java/vazkii/quark/base/handler/DropoffHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public void smartDropoff() {
int slots = handler.getSlots();
for(int i = 0; i < slots; i++) {
ItemStack stackAt = handler.getStackInSlot(i);
if(stackAt == null)
if(stackAt.isEmpty())
continue;

boolean itemEqual = stack.getItem() == stackAt.getItem();
Expand Down Expand Up @@ -198,7 +198,7 @@ public void dropoff(DropoffPredicate pred) {
for(int i = InventoryPlayer.getHotbarSize(); i < inv.mainInventory.size(); i++) {
ItemStack stackAt = inv.getStackInSlot(i);

if(stackAt != null && !FavoriteItems.isItemFavorited(stackAt)) {
if(!stackAt.isEmpty() && !FavoriteItems.isItemFavorited(stackAt)) {
ItemStack ret = insert(stackAt, pred);
if(!ItemStack.areItemsEqual(stackAt, ret))
inv.setInventorySlotContents(i, ret);
Expand All @@ -212,7 +212,7 @@ public ItemStack insert(ItemStack stack, DropoffPredicate pred) {
IItemHandler handler = pair.getLeft();
ret = insertInHandler(handler, stack, pred);
if(ret == null)
return null;
return ItemStack.EMPTY;
}

return ret;
Expand All @@ -221,11 +221,11 @@ public ItemStack insert(ItemStack stack, DropoffPredicate pred) {
public ItemStack insertInHandler(IItemHandler handler, final ItemStack stack, DropoffPredicate pred) {
if(pred.apply(stack, handler)) {
ItemStack retStack = ItemHandlerHelper.insertItemStacked(handler, stack, false);
if(retStack != null)
if(!retStack.isEmpty())
retStack = retStack.copy();

if(retStack == null || retStack.getCount() == 0)
return null;
if(retStack.isEmpty() || retStack.getCount() == 0)
return ItemStack.EMPTY;

return retStack;
}
Expand All @@ -249,7 +249,7 @@ public void dropoff(DropoffPredicate pred) {
for(int i = inv.getSlots() - 1; i >= 0; i--) {
ItemStack stackAt = inv.getStackInSlot(i);

if(stackAt != null) {
if(!stackAt.isEmpty()) {
ItemStack copy = stackAt.copy();
ItemStack ret = insertInHandler(playerInv, stackAt, pred);

Expand All @@ -270,7 +270,7 @@ public PlayerInvWrapper(IInventory inv) {

@Override
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
if(stack != null)
if(!stack.isEmpty())
stack = stack.copy();

return super.insertItem(slot, stack, simulate);
Expand Down
26 changes: 13 additions & 13 deletions src/main/java/vazkii/quark/vanity/feature/BoatSails.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,6 @@ public void onEntityInit(EntityConstructing event) {
}
}

@SubscribeEvent
public void preUpdate(EntityEvent.CanUpdate event) {
if(event.getEntity() instanceof EntityBoat && !event.getEntity().getEntityWorld().isRemote) {
ItemStack dataStack = event.getEntity().getDataManager().get(bannerData);

NBTTagCompound cmp = event.getEntity().getEntityData().getCompoundTag(TAG_BANNER);
ItemStack nbtStack = new ItemStack(cmp);

if(dataStack != nbtStack)
event.getEntity().getDataManager().set(bannerData, nbtStack);
}
}

@SubscribeEvent
public void onEntityInteract(EntityInteract event) {
Entity target = event.getTarget();
Expand Down Expand Up @@ -103,6 +90,19 @@ public void onEntityInteract(EntityInteract event) {
public static ItemStack getBanner(EntityBoat boat) {
return boat.getDataManager().get(bannerData);
}

public static void onBoatUpdate(EntityBoat boat) {
if(boat.getEntityWorld().isRemote)
return;

ItemStack dataStack = boat.getDataManager().get(bannerData);

NBTTagCompound cmp = boat.getEntityData().getCompoundTag(TAG_BANNER);
ItemStack nbtStack = new ItemStack(cmp);

if(dataStack != nbtStack)
boat.getDataManager().set(bannerData, nbtStack);
}

public static void dropBoatBanner(EntityBoat boat) {
if(!ModuleLoader.isFeatureEnabled(BoatSails.class))
Expand Down

0 comments on commit 36ade51

Please sign in to comment.