Added drops for the hot air balloon

This commit is contained in:
Sollace 2023-08-13 10:04:09 +01:00
parent d27aaac04e
commit 31375f5c2d
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
7 changed files with 74 additions and 8 deletions

View file

@ -1,5 +1,30 @@
package com.minelittlepony.unicopia; package com.minelittlepony.unicopia;
import com.minelittlepony.unicopia.entity.UEntities;
import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.world.World;
public interface Debug { public interface Debug {
boolean DEBUG_SPELLBOOK_CHAPTERS = Boolean.getBoolean("unicopia.debug.spellbookChapters"); boolean SPELLBOOK_CHAPTERS = Boolean.getBoolean("unicopia.debug.spellbookChapters");
boolean CHECK_GAME_VALUES = Boolean.getBoolean("unicopia.debug.checkGameValues");
boolean[] TESTS_COMPLETE = {false};
static void runTests(World world) {
if (!CHECK_GAME_VALUES || TESTS_COMPLETE[0]) {
return;
}
TESTS_COMPLETE[0] = true;
try {
for (var type : BoatEntity.Type.values()) {
var balloon = UEntities.AIR_BALLOON.create(world);
balloon.setBasketType(type);
balloon.asItem();
}
} catch (Throwable t) {
throw new IllegalStateException("Tests failed", t);
}
}
} }

View file

@ -70,9 +70,12 @@ public class Unicopia implements ModInitializer {
((BlockDestructionManager.Source)w).getDestructionManager().tick(); ((BlockDestructionManager.Source)w).getDestructionManager().tick();
ZapAppleStageStore.get(w).tick(); ZapAppleStageStore.get(w).tick();
WeatherConditions.get(w).tick(); WeatherConditions.get(w).tick();
if (Debug.DEBUG_SPELLBOOK_CHAPTERS) { if (Debug.SPELLBOOK_CHAPTERS) {
SpellbookChapterLoader.INSTANCE.sendUpdate(w.getServer()); SpellbookChapterLoader.INSTANCE.sendUpdate(w.getServer());
} }
if (Debug.CHECK_GAME_VALUES) {
Debug.runTests(w);
}
}); });
NocturnalSleepManager.bootstrap(); NocturnalSleepManager.bootstrap();

View file

@ -39,7 +39,7 @@ public class SpellbookChapterList {
} }
public Chapter getCurrentChapter() { public Chapter getCurrentChapter() {
if (Debug.DEBUG_SPELLBOOK_CHAPTERS) { if (Debug.SPELLBOOK_CHAPTERS) {
ClientChapters.getChapters().forEach(chapter -> { ClientChapters.getChapters().forEach(chapter -> {
Optional.ofNullable(chapters.get(chapter.id())).flatMap(Chapter::content).ifPresent(old -> { Optional.ofNullable(chapters.get(chapter.id())).flatMap(Chapter::content).ifPresent(old -> {
chapter.content().ifPresent(neu -> neu.copyStateFrom(old)); chapter.content().ifPresent(neu -> neu.copyStateFrom(old));

View file

@ -147,7 +147,7 @@ public class SpellbookScreen extends HandledScreen<SpellbookScreenHandler> imple
context.drawTexture(TEXTURE, x, y, 0, 0, backgroundWidth, backgroundHeight, 512, 256); context.drawTexture(TEXTURE, x, y, 0, 0, backgroundWidth, backgroundHeight, 512, 256);
if (Debug.DEBUG_SPELLBOOK_CHAPTERS) { if (Debug.SPELLBOOK_CHAPTERS) {
clearAndInit(); clearAndInit();
} }

View file

@ -71,7 +71,7 @@ public class SpellbookChapterLoader extends JsonDataLoader implements Identifiab
LOGGER.error("Could not load spellbook chapters due to exception", e); LOGGER.error("Could not load spellbook chapters due to exception", e);
} }
if (Debug.DEBUG_SPELLBOOK_CHAPTERS) { if (Debug.SPELLBOOK_CHAPTERS) {
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
try { try {
Util.waitAndApply(executor -> reload(CompletableFuture::completedFuture, manager, profiler, profiler, Util.getMainWorkerExecutor(), executor)).get(); Util.waitAndApply(executor -> reload(CompletableFuture::completedFuture, manager, profiler, profiler, Util.getMainWorkerExecutor(), executor)).get();

View file

@ -6,6 +6,7 @@ import net.minecraft.entity.data.*;
import net.minecraft.entity.mob.FlyingEntity; import net.minecraft.entity.mob.FlyingEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtCompound;
@ -31,6 +32,7 @@ import com.minelittlepony.unicopia.entity.collision.EntityCollisions;
import com.minelittlepony.unicopia.entity.collision.MultiBox; import com.minelittlepony.unicopia.entity.collision.MultiBox;
import com.minelittlepony.unicopia.entity.duck.EntityDuck; import com.minelittlepony.unicopia.entity.duck.EntityDuck;
import com.minelittlepony.unicopia.item.HotAirBalloonItem; import com.minelittlepony.unicopia.item.HotAirBalloonItem;
import com.minelittlepony.unicopia.item.UItems;
import com.minelittlepony.unicopia.server.world.WeatherConditions; import com.minelittlepony.unicopia.server.world.WeatherConditions;
public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.ComplexCollidable, MultiBoundingBoxEntity { public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.ComplexCollidable, MultiBoundingBoxEntity {
@ -146,7 +148,6 @@ public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.C
@Override @Override
public void tick() { public void tick() {
this.shouldSave();
setAir(getMaxAir()); setAir(getMaxAir());
int boostTicks = getBoostTicks(); int boostTicks = getBoostTicks();
@ -343,7 +344,8 @@ public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.C
return ActionResult.SUCCESS; return ActionResult.SUCCESS;
} }
if (stack.isOf(Items.LANTERN) && !hasBurner()) { if ((stack.isOf(Items.LANTERN) || stack.isOf(Items.SOUL_LANTERN)) && !hasBurner()) {
setStackInHand(Hand.MAIN_HAND, stack.copyWithCount(1));
if (!player.getAbilities().creativeMode) { if (!player.getAbilities().creativeMode) {
stack.decrement(1); stack.decrement(1);
} }
@ -356,6 +358,33 @@ public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.C
return ActionResult.PASS; return ActionResult.PASS;
} }
@Override
protected void dropInventory() {
ItemStack lantern = getStackInHand(Hand.MAIN_HAND);
setStackInHand(Hand.MAIN_HAND, ItemStack.EMPTY);
dropStack(lantern);
dropStack(getPickBlockStack());
}
@Override
public ItemStack getPickBlockStack() {
return asItem().getDefaultStack();
}
public Item asItem() {
return switch (getBasketType()) {
case SPRUCE -> UItems.SPRUCE_BASKET;
case BIRCH -> UItems.BIRCH_BASKET;
case JUNGLE -> UItems.JUNGLE_BASKET;
case ACACIA -> UItems.ACACIA_BASKET;
case CHERRY -> UItems.CHERRY_BASKET;
case DARK_OAK -> UItems.DARK_OAK_BASKET;
case MANGROVE -> UItems.MANGROVE_BASKET;
case BAMBOO -> UItems.BAMBOO_BASKET;
default -> UItems.OAK_BASKET;
};
}
@Override @Override
public boolean isCollidable() { public boolean isCollidable() {
return true; return true;
@ -424,7 +453,7 @@ public class AirBalloonEntity extends FlyingEntity implements EntityCollisions.C
output.accept(VoxelShapes.cuboid(new Box(box.minX, box.minY, box.minZ, box.minX + wallThickness, wallheight, box.maxZ))); output.accept(VoxelShapes.cuboid(new Box(box.minX, box.minY, box.minZ, box.minX + wallThickness, wallheight, box.maxZ)));
// top of balloon // top of balloon
if (hasBalloon()) { if (hasBalloon() && getInflation() > 0) {
output.accept(VoxelShapes.cuboid(getBalloonBoundingBox())); output.accept(VoxelShapes.cuboid(getBalloonBoundingBox()));
} }
} }

View file

@ -120,6 +120,15 @@ public interface UItems {
Item SPELLBOOK = register("spellbook", new SpellbookItem(new Item.Settings().maxCount(1).rarity(Rarity.UNCOMMON)), ItemGroups.TOOLS); Item SPELLBOOK = register("spellbook", new SpellbookItem(new Item.Settings().maxCount(1).rarity(Rarity.UNCOMMON)), ItemGroups.TOOLS);
Item OAK_BASKET = register("oak_basket", new BasketItem(BoatEntity.Type.OAK, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL); Item OAK_BASKET = register("oak_basket", new BasketItem(BoatEntity.Type.OAK, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item SPRUCE_BASKET = register("spruce_basket", new BasketItem(BoatEntity.Type.SPRUCE, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item BIRCH_BASKET = register("birch_basket", new BasketItem(BoatEntity.Type.BIRCH, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item JUNGLE_BASKET = register("jungle_basket", new BasketItem(BoatEntity.Type.JUNGLE, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item ACACIA_BASKET = register("acacia_basket", new BasketItem(BoatEntity.Type.ACACIA, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item CHERRY_BASKET = register("cherry_basket", new BasketItem(BoatEntity.Type.CHERRY, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item DARK_OAK_BASKET = register("dark_oak_basket", new BasketItem(BoatEntity.Type.DARK_OAK, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item MANGROVE_BASKET = register("mangrove_basket", new BasketItem(BoatEntity.Type.MANGROVE, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item BAMBOO_BASKET = register("bamboo_basket", new BasketItem(BoatEntity.Type.BAMBOO, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
Item GIANT_BALLOON = register("giant_balloon", new HotAirBalloonItem(new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL); Item GIANT_BALLOON = register("giant_balloon", new HotAirBalloonItem(new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
AmuletItem PEGASUS_AMULET = register("pegasus_amulet", new PegasusAmuletItem(new FabricItemSettings() AmuletItem PEGASUS_AMULET = register("pegasus_amulet", new PegasusAmuletItem(new FabricItemSettings()