From afdec48090f4205528832e61b98c7a2022fa0a8f Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 17 Feb 2019 01:08:19 +0200 Subject: [PATCH] Restructure! Remove all the subscribe events and shove them _waaaaaay_ in the back there. --- .../minelittlepony/unicopia/ClientHooks.java | 83 ++++++ .../com/minelittlepony/unicopia/UClient.java | 25 +- .../com/minelittlepony/unicopia/UConfig.java | 2 +- .../com/minelittlepony/unicopia/Unicopia.java | 236 ++---------------- .../unicopia/UnicopiaClient.java | 197 ++++----------- .../unicopia/block/BlockAlfalfa.java | 2 +- .../unicopia/block/BlockCloud.java | 2 +- .../unicopia/block/BlockCloudDoor.java | 2 +- .../unicopia/block/BlockCloudFarm.java | 2 +- .../unicopia/block/BlockCloudFence.java | 2 +- .../unicopia/block/BlockCloudSlab.java | 2 +- .../unicopia/block/BlockGlowingGem.java | 4 +- .../unicopia/block/BlockTomatoPlant.java | 2 +- .../unicopia/edibles/ItemEdible.java | 2 +- .../unicopia/enchanting/SpellRecipe.java | 2 +- .../unicopia/entity/EntityCloud.java | 6 +- .../unicopia/entity/EntitySpell.java | 2 +- .../unicopia/entity/EntitySpellbook.java | 2 +- .../unicopia/init/ClientHooks.java | 17 ++ .../minelittlepony/unicopia/init/Hooks.java | 39 +++ .../unicopia/{ => init}/UBlocks.java | 3 +- .../unicopia/{ => init}/UEffects.java | 3 +- .../unicopia/{ => init}/UEntities.java | 9 +- .../unicopia/{ => init}/UItems.java | 7 +- .../unicopia/{ => init}/UMaterials.java | 2 +- .../unicopia/{ => init}/UParticles.java | 4 +- .../unicopia/{ => init}/USounds.java | 4 +- .../unicopia/item/ItemApple.java | 2 +- .../unicopia/item/ItemStick.java | 2 +- .../minelittlepony/unicopia/player/Hooks.java | 90 +++++++ .../unicopia/player/IPlayer.java | 5 - .../unicopia/player/IRaceContainer.java | 12 +- .../unicopia/player/IUpdatable.java | 6 +- .../unicopia/player/ItemCapabilities.java | 7 +- .../player/PlayerAbilityDelegate.java | 2 +- .../unicopia/player/PlayerCapabilities.java | 10 +- .../player/PlayerGravityDelegate.java | 2 +- .../unicopia/player/PlayerSpeciesList.java | 12 +- .../unicopia/power/PowerCloudBase.java | 2 +- .../unicopia/power/PowerDisguise.java | 2 +- .../unicopia/power/PowerFeed.java | 2 +- .../unicopia/power/PowerGrow.java | 2 +- .../unicopia/power/PowerMagic.java | 2 +- .../unicopia/power/PowerTeleport.java | 2 +- .../unicopia/spell/GenericSpell.java | 2 +- .../unicopia/spell/SpellCharge.java | 2 +- .../unicopia/spell/SpellDarkness.java | 2 +- .../unicopia/spell/SpellDisguise.java | 2 +- .../unicopia/spell/SpellIce.java | 2 +- .../unicopia/spell/SpellPortal.java | 2 +- .../unicopia/spell/SpellReveal.java | 2 +- .../unicopia/spell/SpellShield.java | 2 +- .../unicopia/spell/SpellVortex.java | 2 +- .../unicopia/world/BlockInteractions.java | 72 ++++++ .../minelittlepony/unicopia/world/Hooks.java | 41 +++ .../minelittlepony/unicopia/world/UWorld.java | 42 +++- 56 files changed, 544 insertions(+), 454 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/ClientHooks.java create mode 100644 src/main/java/com/minelittlepony/unicopia/init/ClientHooks.java create mode 100644 src/main/java/com/minelittlepony/unicopia/init/Hooks.java rename src/main/java/com/minelittlepony/unicopia/{ => init}/UBlocks.java (98%) rename src/main/java/com/minelittlepony/unicopia/{ => init}/UEffects.java (93%) rename src/main/java/com/minelittlepony/unicopia/{ => init}/UEntities.java (94%) rename src/main/java/com/minelittlepony/unicopia/{ => init}/UItems.java (98%) rename src/main/java/com/minelittlepony/unicopia/{ => init}/UMaterials.java (82%) rename src/main/java/com/minelittlepony/unicopia/{ => init}/UParticles.java (93%) rename src/main/java/com/minelittlepony/unicopia/{ => init}/USounds.java (83%) create mode 100644 src/main/java/com/minelittlepony/unicopia/player/Hooks.java create mode 100644 src/main/java/com/minelittlepony/unicopia/world/BlockInteractions.java create mode 100644 src/main/java/com/minelittlepony/unicopia/world/Hooks.java diff --git a/src/main/java/com/minelittlepony/unicopia/ClientHooks.java b/src/main/java/com/minelittlepony/unicopia/ClientHooks.java new file mode 100644 index 00000000..90c67464 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ClientHooks.java @@ -0,0 +1,83 @@ +package com.minelittlepony.unicopia; + +import com.minelittlepony.unicopia.forgebullshit.FUF; +import com.minelittlepony.unicopia.hud.UHud; +import com.minelittlepony.unicopia.player.IPlayer; +import com.minelittlepony.unicopia.player.IView; +import com.minelittlepony.unicopia.player.PlayerSpeciesList; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiOptions; +import net.minecraft.client.gui.GuiShareToLan; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.client.event.FOVUpdateEvent; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.client.event.RenderLivingEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.relauncher.Side; + +@EventBusSubscriber(Side.CLIENT) +class ClientHooks { + // This fixes lighting errors on the armour slots. + // #MahjongPls + @FUF(reason = "Forge should fix this. Cancelling their event skips neccessary state resetting at the end of the render method") + @SubscribeEvent + public static void postEntityRender(RenderLivingEvent.Post event) { + GlStateManager.enableAlpha(); + } + + @SubscribeEvent + public static void preEntityRender(RenderLivingEvent.Pre event) { + UClient.instance().renderEntity(event.getEntity(), event.getPartialRenderTick()); + } + + @SubscribeEvent + public static void onDisplayGui(GuiScreenEvent.InitGuiEvent.Post event) { + if (event.getGui() instanceof GuiOptions || event.getGui() instanceof GuiShareToLan) { + UnicopiaClient.addUniButton(event.getButtonList()); + } + } + + @SubscribeEvent + public static void onGameTick(TickEvent.ClientTickEvent event) { + if (event.phase == Phase.END) { + UClient.instance().tick(); + } + } + + @SubscribeEvent + public static void onRenderHud(RenderGameOverlayEvent.Post event) { + if (event.getType() != ElementType.ALL) { + return; + } + + IPlayer player = UClient.instance().getIPlayer(); + if (player != null && Minecraft.getMinecraft().world != null) { + UHud.instance.renderHud(player, event.getResolution()); + } + } + + @SubscribeEvent + public static void modifyFOV(FOVUpdateEvent event) { + event.setNewfov(PlayerSpeciesList.instance().getPlayer(event.getEntity()).getCamera().calculateFieldOfView(event.getFov())); + } + + @SubscribeEvent + public static void setupPlayerCamera(EntityViewRenderEvent.CameraSetup event) { + + IPlayer player = UClient.instance().getIPlayer(); + + if (player != null) { + IView view = player.getCamera(); + + event.setRoll(view.calculateRoll()); + event.setPitch(view.calculatePitch(event.getPitch())); + event.setYaw(view.calculateYaw(event.getYaw())); + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/UClient.java b/src/main/java/com/minelittlepony/unicopia/UClient.java index 66e4f93d..ba1161db 100644 --- a/src/main/java/com/minelittlepony/unicopia/UClient.java +++ b/src/main/java/com/minelittlepony/unicopia/UClient.java @@ -7,23 +7,21 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.entity.EntityFakeServerPlayer; import com.minelittlepony.unicopia.forgebullshit.FUF; +import com.minelittlepony.unicopia.player.IPlayer; +import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.mojang.authlib.GameProfile; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.IInteractionObject; import net.minecraft.world.WorldServer; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; public class UClient { private static UClient instance; public static boolean isClientSide() { - return FMLCommonHandler.instance().getSide().isClient(); + return net.minecraftforge.fml.common.FMLCommonHandler.instance().getSide().isClient(); } @FUF(reason = "Forced client Separation") @@ -50,6 +48,11 @@ public class UClient { return null; } + @Nullable + public IPlayer getIPlayer() { + return PlayerSpeciesList.instance().getPlayer(getPlayer()); + } + @FUF(reason = "Forced client Separation") @Nullable public EntityPlayer getPlayerByUUID(UUID playerId) { @@ -75,9 +78,15 @@ public class UClient { return new EntityFakeServerPlayer((WorldServer)observer.world, profile); } - public void preInit(FMLPreInitializationEvent event) {} + public boolean renderEntity(Entity entity, float renderPartialTicks) { + return false; + } - public void init(FMLInitializationEvent event) {} + public void tick() {} - public void posInit(FMLPostInitializationEvent event) {} + public void preInit() {} + + public void init() {} + + public void posInit() {} } diff --git a/src/main/java/com/minelittlepony/unicopia/UConfig.java b/src/main/java/com/minelittlepony/unicopia/UConfig.java index 053d12cd..48eee173 100644 --- a/src/main/java/com/minelittlepony/unicopia/UConfig.java +++ b/src/main/java/com/minelittlepony/unicopia/UConfig.java @@ -24,7 +24,7 @@ public class UConfig { .setPrettyPrinting() .create(); - public static UConfig getInstance() { + public static UConfig instance() { return instance; } diff --git a/src/main/java/com/minelittlepony/unicopia/Unicopia.java b/src/main/java/com/minelittlepony/unicopia/Unicopia.java index c94aacfb..ab135023 100644 --- a/src/main/java/com/minelittlepony/unicopia/Unicopia.java +++ b/src/main/java/com/minelittlepony/unicopia/Unicopia.java @@ -1,46 +1,19 @@ package com.minelittlepony.unicopia; -import net.minecraft.block.Block; -import net.minecraft.block.BlockTallGrass; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; -import net.minecraft.potion.Potion; -import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.event.entity.ProjectileImpactEvent; -import net.minecraftforge.event.entity.item.ItemTossEvent; -import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; -import net.minecraftforge.event.entity.player.PlayerDropsEvent; -import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; -import net.minecraftforge.event.entity.player.UseHoeEvent; -import net.minecraftforge.event.terraingen.PopulateChunkEvent; -import net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType; -import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLServerStartingEvent; -import net.minecraftforge.fml.common.eventhandler.Event.Result; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; import net.minecraftforge.fml.common.network.IGuiHandler; import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.common.registry.EntityEntry; import java.util.Map; import java.util.function.Function; @@ -51,25 +24,19 @@ import com.google.gson.JsonObject; import com.minelittlepony.jumpingcastle.api.IChannel; import com.minelittlepony.jumpingcastle.api.JumpingCastle; import com.minelittlepony.unicopia.advancements.UAdvancements; -import com.minelittlepony.unicopia.block.ITillable; import com.minelittlepony.unicopia.command.Commands; import com.minelittlepony.unicopia.enchanting.Pages; import com.minelittlepony.unicopia.enchanting.SpellRecipe; import com.minelittlepony.unicopia.forgebullshit.FBS; -import com.minelittlepony.unicopia.forgebullshit.FUF; +import com.minelittlepony.unicopia.init.UEntities; +import com.minelittlepony.unicopia.init.UItems; import com.minelittlepony.unicopia.inventory.gui.ContainerSpellBook; import com.minelittlepony.unicopia.inventory.gui.GuiSpellBook; import com.minelittlepony.unicopia.network.MsgPlayerAbility; import com.minelittlepony.unicopia.network.MsgPlayerCapabilities; import com.minelittlepony.unicopia.network.MsgRequestCapabilities; -import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.power.PowersRegistry; -import com.minelittlepony.unicopia.spell.SpellRegistry; -import com.minelittlepony.unicopia.structure.CloudDungeon; -import com.minelittlepony.unicopia.structure.GroundDungeon; import com.minelittlepony.unicopia.util.crafting.CraftingManager; -import com.minelittlepony.unicopia.world.CloudGen; -import com.minelittlepony.unicopia.world.StructuresGen; import com.minelittlepony.unicopia.world.UWorld; @Mod( @@ -78,36 +45,37 @@ import com.minelittlepony.unicopia.world.UWorld; version = Unicopia.VERSION, dependencies = "required-after:jumpingcastle" ) -@EventBusSubscriber public class Unicopia implements IGuiHandler { - - public static final String MODID = "unicopia"; public static final String NAME = "@NAME@"; public static final String VERSION = "@VERSION@"; public static final Logger log = LogManager.getLogger(); - public static IChannel channel; + private static IChannel channel; private static CraftingManager craftingManager; + public static CraftingManager getCraftingManager() { + return craftingManager; + } + + public static IChannel getConnection() { + return channel; + } @EventHandler public void preInit(FMLPreInitializationEvent event) { UConfig.init(event.getModConfigurationDirectory()); - UClient.instance().preInit(event); + UClient.instance().preInit(); UWorld.instance().init(); MinecraftForge.TERRAIN_GEN_BUS.register(Unicopia.class); } - @FUF(reason = "Why u no run!?!??!") - @SubscribeEvent - public static void onStructureGenStatic(PopulateChunkEvent.Populate event) { - if (event.getType() == EventType.DUNGEON) { - UWorld.instance().generateStructures(event.getWorld(), event.getChunkX(), event.getChunkZ(), event.getGen()); - } + @EventHandler + public void onServerStart(FMLServerStartingEvent event) { + Commands.init(event); } @EventHandler @@ -125,7 +93,7 @@ public class Unicopia implements IGuiHandler { NetworkRegistry.INSTANCE.registerGuiHandler(this, this); - UClient.instance().init(event); + UClient.instance().init(); } @EventHandler @@ -142,181 +110,9 @@ public class Unicopia implements IGuiHandler { Pages.instance().load(); Biome.REGISTRY.forEach(UEntities::registerSpawnEntries); - UClient.instance().posInit(event); + UClient.instance().posInit(); UItems.fixRecipes(); - - MapGenStructureIO.registerStructure(CloudGen.Start.class, "unicopia:clouds"); - MapGenStructureIO.registerStructure(StructuresGen.Start.class, "unicopia:ruins"); - MapGenStructureIO.registerStructureComponent(CloudDungeon.class, "unicopia:cloud_dungeon"); - MapGenStructureIO.registerStructureComponent(GroundDungeon.class, "unicopia:ground_dungeon"); - } - - public static CraftingManager getCraftingManager() { - return craftingManager; - } - - @SubscribeEvent - public static void registerItems(RegistryEvent.Register event) { - UItems.init(event.getRegistry()); - } - - @SubscribeEvent - public static void registerBlocks(RegistryEvent.Register event) { - UBlocks.init(event.getRegistry()); - } - - @SubscribeEvent - public static void registerPotions(RegistryEvent.Register event) { - UEffects.init(event.getRegistry()); - } - - @SubscribeEvent - public static void registerSounds(RegistryEvent.Register event) { - USounds.init(event.getRegistry()); - } - - @SubscribeEvent - public static void registerEntities(RegistryEvent.Register event) { - UEntities.init(event.getRegistry()); - } - - @SubscribeEvent - public static void onBlockHarvested(BlockEvent.HarvestDropsEvent event) { - Block block = event.getState().getBlock(); - - int fortuneFactor = 1 + event.getFortuneLevel() * 15; - - if (block == Blocks.STONE) { - if (event.getWorld().rand.nextInt(500 / fortuneFactor) == 0) { - for (int i = 0; i < 1 + event.getFortuneLevel(); i++) { - if (event.getWorld().rand.nextInt(10) > 3) { - event.getDrops().add(new ItemStack(UItems.curse)); - } else { - event.getDrops().add(new ItemStack(UItems.spell)); - } - } - } - - if (event.getWorld().rand.nextInt(5000) == 0) { - event.getDrops().add(SpellRegistry.instance().enchantStack(new ItemStack(UItems.spell), "awkward")); - } - } else if (block instanceof BlockTallGrass) { - if (event.getWorld().rand.nextInt(25 / fortuneFactor) == 0) { - for (int i = 0; i < 1 + event.getFortuneLevel(); i++) { - int chance = event.getWorld().rand.nextInt(3); - if (chance == 0) { - event.getDrops().add(new ItemStack(UItems.alfalfa_seeds)); - } else if (chance == 1) { - event.getDrops().add(new ItemStack(UItems.apple_seeds)); - } else { - event.getDrops().add(new ItemStack(UItems.tomato_seeds)); - } - } - } - } - } - - @SubscribeEvent - public static void onBlockTilled(UseHoeEvent event) { - BlockPos pos = event.getPos(); - World world = event.getWorld(); - - IBlockState state = world.getBlockState(pos); - - if (state.getBlock() instanceof ITillable) { - ITillable farm = ((ITillable)state.getBlock()); - - if (farm.canBeTilled(event.getCurrent(), event.getEntityPlayer(), world, state, pos)) { - - world.setBlockState(pos, farm.getFarmlandState(event.getCurrent(), event.getEntityPlayer(), world, state, pos)); - - event.setResult(Result.ALLOW); - } - } - } - - @SubscribeEvent - public static void onWorldTick(TickEvent.WorldTickEvent event) { - if (event.phase == Phase.START) { - UWorld.tick(event.world); - } - } - - @SubscribeEvent - public static void onPlayerTick(TickEvent.PlayerTickEvent event) { - if (event.phase == Phase.END) { - PlayerSpeciesList.instance().getPlayer(event.player).onUpdate(event.player); - } else { - PlayerSpeciesList.instance().getPlayer(event.player).beforeUpdate(event.player); - } - } - - @SubscribeEvent - public static void onProjectileHit(ProjectileImpactEvent event) { - RayTraceResult ray = event.getRayTraceResult(); - - if (ray.typeOfHit == RayTraceResult.Type.ENTITY && ray.entityHit instanceof EntityPlayer) { - if (!PlayerSpeciesList.instance().getPlayer((EntityPlayer)ray.entityHit).onProjectileImpact(event.getEntity())) { - event.setCanceled(true); - } - } - } - - @SubscribeEvent - public static void onPlayerTossItem(ItemTossEvent event) { - Race race = PlayerSpeciesList.instance().getPlayer(event.getPlayer()).getPlayerSpecies(); - - PlayerSpeciesList.instance().getEntity(event.getEntityItem()).setPlayerSpecies(race); - } - - @SubscribeEvent - public static void onPlayerDropItems(PlayerDropsEvent event) { - - Race race = PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).getPlayerSpecies(); - - event.getDrops().stream() - .map(PlayerSpeciesList.instance()::getEntity) - .forEach(item -> item.setPlayerSpecies(race)); - } - - @SubscribeEvent - public static void onPlayerFall(PlayerFlyableFallEvent event) { - PlayerSpeciesList.instance() - .getPlayer(event.getEntityPlayer()) - .onFall(event.getDistance(), event.getMultiplier()); - } - - @EventHandler - public void onServerStart(FMLServerStartingEvent event) { - Commands.init(event); - } - - @SubscribeEvent - public static void onItemUseBegin(LivingEntityUseItemEvent.Start event) { - Entity e = event.getEntity(); - - if (!event.isCanceled() && e instanceof EntityPlayer) { - PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().begin(event.getItem()); - } - } - - @SubscribeEvent - public static void onItemUseCancel(LivingEntityUseItemEvent.Stop event) { - Entity e = event.getEntity(); - - if (!event.isCanceled() && e instanceof EntityPlayer) { - PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().end(); - } - } - - @SubscribeEvent - public static void onItemUseFinish(LivingEntityUseItemEvent.Finish event) { - Entity e = event.getEntity(); - - if (!event.isCanceled() && e instanceof EntityPlayer) { - PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().finish(); - } } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/UnicopiaClient.java b/src/main/java/com/minelittlepony/unicopia/UnicopiaClient.java index 032626b4..bdf5e02b 100644 --- a/src/main/java/com/minelittlepony/unicopia/UnicopiaClient.java +++ b/src/main/java/com/minelittlepony/unicopia/UnicopiaClient.java @@ -8,12 +8,12 @@ import javax.annotation.Nullable; import com.minelittlepony.jumpingcastle.api.Target; import com.minelittlepony.unicopia.entity.EntityFakeClientPlayer; -import com.minelittlepony.unicopia.hud.UHud; +import com.minelittlepony.unicopia.init.UEntities; +import com.minelittlepony.unicopia.init.UParticles; import com.minelittlepony.unicopia.input.Keyboard; import com.minelittlepony.unicopia.inventory.gui.GuiOfHolding; import com.minelittlepony.unicopia.network.MsgRequestCapabilities; import com.minelittlepony.unicopia.player.IPlayer; -import com.minelittlepony.unicopia.player.IView; import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.render.DisguiseRenderer; import com.minelittlepony.util.gui.ButtonGridLayout; @@ -24,33 +24,14 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.GuiOptions; -import net.minecraft.client.gui.GuiShareToLan; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.resources.I18n; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.world.IInteractionObject; -import net.minecraftforge.client.event.ColorHandlerEvent; -import net.minecraftforge.client.event.EntityViewRenderEvent; -import net.minecraftforge.client.event.FOVUpdateEvent; -import net.minecraftforge.client.event.GuiScreenEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; -import net.minecraftforge.client.event.RenderLivingEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.fml.common.event.FMLInitializationEvent; -import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; import static com.minelittlepony.util.gui.ButtonGridLayout.*; -@EventBusSubscriber(Side.CLIENT) public class UnicopiaClient extends UClient { /** @@ -64,7 +45,7 @@ public class UnicopiaClient extends UClient { private static Race clientPlayerRace = getclientPlayerRace(); private static Race getclientPlayerRace() { - if (!UConfig.getInstance().ignoresMineLittlePony() + if (!UConfig.instance().ignoresMineLittlePony() && Minecraft.getMinecraft().player != null) { Race race = MineLP.getPlayerPonyRace(); @@ -74,9 +55,38 @@ public class UnicopiaClient extends UClient { } - return UConfig.getInstance().getPrefferedRace(); + return UConfig.instance().getPrefferedRace(); } + static void addUniButton(List buttons) { + ButtonGridLayout layout = new ButtonGridLayout(buttons); + + GuiButton uni = new UButton(layout.getNextButtonId(), 0, 0, 150, 20, I18n.format("gui.unicopia"), b -> { + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_ANVIL_USE, 1)); + b.displayString = "<< WIP >>"; + + return false; + }); + + List possibleXCandidates = list(layout.getColumns()); + List possibleYCandidates = list(layout.getRows()); + + uni.y = last(possibleYCandidates, 1); + + if (layout.getRows() + .filter(y -> layout.getRow(y).size() == 1).count() < 2) { + uni.y += 25; + uni.x = first(possibleXCandidates, 0); + + layout.getRow(last(possibleYCandidates, 0)).forEach(button -> { + button.y = Math.max(button.y, uni.y + uni.height + 13); + }); + } else { + uni.x = first(possibleXCandidates, 2); + } + + layout.getElements().add(uni); + } @Override public void displayGuiToPlayer(EntityPlayer player, IInteractionObject inventory) { @@ -130,149 +140,52 @@ public class UnicopiaClient extends UClient { return Minecraft.getMinecraft().gameSettings.thirdPersonView; } - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void onDisplayGui(GuiScreenEvent.InitGuiEvent.Post event) { - if (event.getGui() instanceof GuiOptions || event.getGui() instanceof GuiShareToLan) { - addUniButton(event); - } - } + @Override + public boolean renderEntity(Entity entity, float renderPartialTicks) { - static void addUniButton(GuiScreenEvent.InitGuiEvent.Post event) { - ButtonGridLayout layout = new ButtonGridLayout(event.getButtonList()); - - GuiButton uni = new UButton(layout.getNextButtonId(), 0, 0, 150, 20, I18n.format("gui.unicopia"), b -> { - Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_ANVIL_USE, 1)); - b.displayString = "<< WIP >>"; - - return false; - }); - - List possibleXCandidates = list(layout.getColumns()); - List possibleYCandidates = list(layout.getRows()); - - uni.y = last(possibleYCandidates, 1); - - if (layout.getRows() - .filter(y -> layout.getRow(y).size() == 1).count() < 2) { - uni.y += 25; - uni.x = first(possibleXCandidates, 0); - - layout.getRow(last(possibleYCandidates, 0)).forEach(button -> { - button.y = Math.max(button.y, uni.y + uni.height + 13); - }); - } else { - uni.x = first(possibleXCandidates, 2); - } - - layout.getElements().add(uni); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void preEntityRender(RenderLivingEvent.Pre event) { - - Entity entity = event.getEntity(); - - if (DisguiseRenderer.instance().renderDisguise(entity, event.getPartialRenderTick())) { - event.setCanceled(true); + if (DisguiseRenderer.instance().renderDisguise(entity, renderPartialTicks)) { + return true; } if (entity instanceof EntityPlayer) { IPlayer iplayer = PlayerSpeciesList.instance().getPlayer((EntityPlayer)entity); - if (iplayer.isInvisible()) { - event.setCanceled(true); + if (DisguiseRenderer.instance().renderDisguiseToGui(iplayer)) { + return true; } - if (DisguiseRenderer.instance().renderDisguiseToGui(iplayer)) { - event.setCanceled(true); + if (iplayer.isInvisible()) { + return true; } } + + return false; } - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void postEntityRender(RenderLivingEvent.Post event) { - // This fixes lighting errors on the armour slots. - // #MahjongPls - // @FUF(reason = "Forge should fix this. Cancelling their event skips neccessary state resetting at the end of the render method") - GlStateManager.enableAlpha(); - } - - @SideOnly(Side.CLIENT) @Override - public void preInit(FMLPreInitializationEvent event) { + public void preInit() { UEntities.preInit(); UParticles.init(); } - @SideOnly(Side.CLIENT) @Override - public void init(FMLInitializationEvent event) { + public void init() { clientPlayerRace = getclientPlayerRace(); } - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void registerItemColours(ColorHandlerEvent.Item event) { - UItems.registerColors(event.getItemColors()); - UBlocks.registerColors(event.getItemColors(), event.getBlockColors()); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void onRenderHud(RenderGameOverlayEvent.Post event) { - if (event.getType() != ElementType.ALL) { - return; - } - - Minecraft mc = Minecraft.getMinecraft(); - if (mc.player != null && mc.world != null) { - IPlayer player = PlayerSpeciesList.instance().getPlayer(mc.player); - - UHud.instance.renderHud(player, event.getResolution()); - } - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void modifyFOV(FOVUpdateEvent event) { - event.setNewfov(PlayerSpeciesList.instance().getPlayer(event.getEntity()).getCamera().calculateFieldOfView(event.getFov())); - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void onGameTick(TickEvent.ClientTickEvent event) { - if (event.phase == Phase.END) { - EntityPlayer player = UClient.instance().getPlayer(); - - if (player != null && !player.isDead) { - Race newRace = getclientPlayerRace(); - - if (newRace != clientPlayerRace) { - clientPlayerRace = newRace; - - Unicopia.channel.send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER); - } - } - - Keyboard.getKeyHandler().onKeyInput(); - } - } - - @SideOnly(Side.CLIENT) - @SubscribeEvent - public static void setupPlayerCamera(EntityViewRenderEvent.CameraSetup event) { - + public void tick() { EntityPlayer player = UClient.instance().getPlayer(); - if (player != null) { - IView view = PlayerSpeciesList.instance().getPlayer(player).getCamera(); + if (player != null && !player.isDead) { + Race newRace = getclientPlayerRace(); - event.setRoll(view.calculateRoll()); - event.setPitch(view.calculatePitch(event.getPitch())); - event.setYaw(view.calculateYaw(event.getYaw())); + if (newRace != clientPlayerRace) { + clientPlayerRace = newRace; + + Unicopia.getConnection().send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER); + } } + + Keyboard.getKeyHandler().onKeyInput(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java b/src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java index 97ca3b9c..90e55429 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java @@ -4,7 +4,7 @@ import java.util.Random; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.UItems; +import com.minelittlepony.unicopia.init.UItems; import net.minecraft.block.BlockCrops; import net.minecraft.block.properties.PropertyEnum; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java index 90a58514..ca2f6694 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java @@ -5,7 +5,7 @@ import java.util.List; import javax.annotation.Nullable; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.UBlocks; +import com.minelittlepony.unicopia.init.UBlocks; import com.minelittlepony.unicopia.player.PlayerSpeciesList; import net.minecraft.block.Block; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java index 1c54bb41..04690d5e 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java @@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.block; import java.util.Random; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.UItems; +import com.minelittlepony.unicopia.init.UItems; import net.minecraft.block.BlockDoor; import net.minecraft.block.SoundType; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java index 56bec8df..012965b9 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java @@ -5,7 +5,7 @@ import java.util.List; import javax.annotation.Nullable; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.UBlocks; +import com.minelittlepony.unicopia.init.UBlocks; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java index 598ac570..98e4cdf6 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java @@ -5,7 +5,7 @@ import java.util.List; import javax.annotation.Nullable; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.UMaterials; +import com.minelittlepony.unicopia.init.UMaterials; import net.minecraft.block.BlockFence; import net.minecraft.block.SoundType; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java index c56b8b63..6e86b763 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java @@ -6,7 +6,7 @@ import java.util.Random; import javax.annotation.Nullable; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.UBlocks; +import com.minelittlepony.unicopia.init.UBlocks; import net.minecraft.block.BlockSlab; import net.minecraft.block.BlockStairs; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockGlowingGem.java b/src/main/java/com/minelittlepony/unicopia/block/BlockGlowingGem.java index a3a8cafa..8e725e94 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockGlowingGem.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockGlowingGem.java @@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.block; import java.util.Random; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.UItems; -import com.minelittlepony.unicopia.UParticles; +import com.minelittlepony.unicopia.init.UItems; +import com.minelittlepony.unicopia.init.UParticles; import com.minelittlepony.unicopia.particle.Particles; import net.minecraft.block.BlockTorch; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockTomatoPlant.java b/src/main/java/com/minelittlepony/unicopia/block/BlockTomatoPlant.java index ee754391..a302e31c 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockTomatoPlant.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockTomatoPlant.java @@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.block; import java.util.Random; -import com.minelittlepony.unicopia.UItems; +import com.minelittlepony.unicopia.init.UItems; import net.minecraft.block.BlockCrops; import net.minecraft.block.SoundType; diff --git a/src/main/java/com/minelittlepony/unicopia/edibles/ItemEdible.java b/src/main/java/com/minelittlepony/unicopia/edibles/ItemEdible.java index b390b978..d2ca8f4b 100644 --- a/src/main/java/com/minelittlepony/unicopia/edibles/ItemEdible.java +++ b/src/main/java/com/minelittlepony/unicopia/edibles/ItemEdible.java @@ -6,8 +6,8 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.UEffects; import com.minelittlepony.unicopia.forgebullshit.IMultiItem; +import com.minelittlepony.unicopia.init.UEffects; import com.minelittlepony.unicopia.player.PlayerSpeciesList; import net.minecraft.advancements.CriteriaTriggers; diff --git a/src/main/java/com/minelittlepony/unicopia/enchanting/SpellRecipe.java b/src/main/java/com/minelittlepony/unicopia/enchanting/SpellRecipe.java index 51c58a36..605bb7e8 100644 --- a/src/main/java/com/minelittlepony/unicopia/enchanting/SpellRecipe.java +++ b/src/main/java/com/minelittlepony/unicopia/enchanting/SpellRecipe.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import com.google.common.collect.Lists; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.UItems; +import com.minelittlepony.unicopia.init.UItems; import com.minelittlepony.unicopia.inventory.InventorySpellBook; import com.minelittlepony.unicopia.spell.SpellRegistry; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java b/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java index 12a1f3bc..a5df4a5c 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java @@ -4,10 +4,10 @@ import java.util.Map; import com.minelittlepony.unicopia.Predicates; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.UBlocks; -import com.minelittlepony.unicopia.UItems; -import com.minelittlepony.unicopia.UParticles; import com.minelittlepony.unicopia.forgebullshit.FUF; +import com.minelittlepony.unicopia.init.UBlocks; +import com.minelittlepony.unicopia.init.UItems; +import com.minelittlepony.unicopia.init.UParticles; import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.player.PlayerSpeciesList; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/EntitySpell.java b/src/main/java/com/minelittlepony/unicopia/entity/EntitySpell.java index 27c4d3fd..11c61af3 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/EntitySpell.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntitySpell.java @@ -6,7 +6,7 @@ import org.apache.commons.lang3.StringUtils; import com.minelittlepony.unicopia.Predicates; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.UItems; +import com.minelittlepony.unicopia.init.UItems; import com.minelittlepony.unicopia.item.ICastable; import com.minelittlepony.unicopia.network.EffectSync; import com.minelittlepony.unicopia.spell.ICaster; diff --git a/src/main/java/com/minelittlepony/unicopia/entity/EntitySpellbook.java b/src/main/java/com/minelittlepony/unicopia/entity/EntitySpellbook.java index 3e10d80b..53ef2aff 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/EntitySpellbook.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntitySpellbook.java @@ -1,8 +1,8 @@ package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.Predicates; -import com.minelittlepony.unicopia.UItems; import com.minelittlepony.unicopia.Unicopia; +import com.minelittlepony.unicopia.init.UItems; import net.minecraft.block.SoundType; import net.minecraft.entity.EntityLiving; diff --git a/src/main/java/com/minelittlepony/unicopia/init/ClientHooks.java b/src/main/java/com/minelittlepony/unicopia/init/ClientHooks.java new file mode 100644 index 00000000..b3aaf963 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/init/ClientHooks.java @@ -0,0 +1,17 @@ +package com.minelittlepony.unicopia.init; + +import net.minecraftforge.client.event.ColorHandlerEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; + +@EventBusSubscriber(Side.CLIENT) +class ClientHooks { + + @SubscribeEvent + public static void registerItemColours(ColorHandlerEvent.Item event) { + UItems.registerColors(event.getItemColors()); + UBlocks.registerColors(event.getItemColors(), event.getBlockColors()); + } + +} diff --git a/src/main/java/com/minelittlepony/unicopia/init/Hooks.java b/src/main/java/com/minelittlepony/unicopia/init/Hooks.java new file mode 100644 index 00000000..bbcec5e0 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/init/Hooks.java @@ -0,0 +1,39 @@ +package com.minelittlepony.unicopia.init; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.potion.Potion; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.EntityEntry; + +@EventBusSubscriber +class Hooks { + + @SubscribeEvent + public static void registerItems(RegistryEvent.Register event) { + UItems.init(event.getRegistry()); + } + + @SubscribeEvent + public static void registerBlocks(RegistryEvent.Register event) { + UBlocks.init(event.getRegistry()); + } + + @SubscribeEvent + public static void registerPotions(RegistryEvent.Register event) { + UEffects.init(event.getRegistry()); + } + + @SubscribeEvent + public static void registerSounds(RegistryEvent.Register event) { + USounds.init(event.getRegistry()); + } + + @SubscribeEvent + public static void registerEntities(RegistryEvent.Register event) { + UEntities.init(event.getRegistry()); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/init/UBlocks.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/UBlocks.java rename to src/main/java/com/minelittlepony/unicopia/init/UBlocks.java index 6c661c4d..afaf41eb 100644 --- a/src/main/java/com/minelittlepony/unicopia/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UBlocks.java @@ -1,5 +1,6 @@ -package com.minelittlepony.unicopia; +package com.minelittlepony.unicopia.init; +import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.block.BlockAlfalfa; import com.minelittlepony.unicopia.block.BlockFruitLeaves; import com.minelittlepony.unicopia.block.BlockGlowingGem; diff --git a/src/main/java/com/minelittlepony/unicopia/UEffects.java b/src/main/java/com/minelittlepony/unicopia/init/UEffects.java similarity index 93% rename from src/main/java/com/minelittlepony/unicopia/UEffects.java rename to src/main/java/com/minelittlepony/unicopia/init/UEffects.java index 1d9cc170..946fd158 100644 --- a/src/main/java/com/minelittlepony/unicopia/UEffects.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UEffects.java @@ -1,5 +1,6 @@ -package com.minelittlepony.unicopia; +package com.minelittlepony.unicopia.init; +import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.potion.UPotion; import net.minecraft.init.MobEffects; diff --git a/src/main/java/com/minelittlepony/unicopia/UEntities.java b/src/main/java/com/minelittlepony/unicopia/init/UEntities.java similarity index 94% rename from src/main/java/com/minelittlepony/unicopia/UEntities.java rename to src/main/java/com/minelittlepony/unicopia/init/UEntities.java index 424e9fd5..4647b233 100644 --- a/src/main/java/com/minelittlepony/unicopia/UEntities.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UEntities.java @@ -1,5 +1,6 @@ -package com.minelittlepony.unicopia; +package com.minelittlepony.unicopia.init; +import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.entity.EntityCloud; import com.minelittlepony.unicopia.entity.EntityConstructionCloud; import com.minelittlepony.unicopia.entity.EntityRacingCloud; @@ -44,7 +45,7 @@ public class UEntities { ); } - static void preInit() { + public static void preInit() { RenderingRegistry.registerEntityRenderingHandler(EntityCloud.class, RenderCloud::new); RenderingRegistry.registerEntityRenderingHandler(EntitySpell.class, RenderGem::new); RenderingRegistry.registerEntityRenderingHandler(EntityProjectile.class, RenderProjectile::new); @@ -52,7 +53,7 @@ public class UEntities { RenderingRegistry.registerEntityRenderingHandler(EntityRainbow.class, RenderRainbow::new); } - static void registerSpawnEntries(Biome biome) { + public static void registerSpawnEntries(Biome biome) { if (!(biome instanceof BiomeHell || biome instanceof BiomeEnd)) { BiomeBS.addSpawnEntry(biome, EnumCreatureType.AMBIENT, EntityWildCloud.class, b -> @@ -61,6 +62,4 @@ public class UEntities { BiomeBS.addSpawnEntry(biome, EnumCreatureType.CREATURE, EntityRainbow.Spawner.class, b -> EntityRainbow.SPAWN_ENTRY); } } - - } diff --git a/src/main/java/com/minelittlepony/unicopia/UItems.java b/src/main/java/com/minelittlepony/unicopia/init/UItems.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/UItems.java rename to src/main/java/com/minelittlepony/unicopia/init/UItems.java index 0b6ec375..94c2772c 100644 --- a/src/main/java/com/minelittlepony/unicopia/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UItems.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia; +package com.minelittlepony.unicopia.init; import com.minelittlepony.unicopia.item.ItemApple; import com.minelittlepony.unicopia.item.ItemAppleMultiType; @@ -43,6 +43,9 @@ import net.minecraftforge.registries.IForgeRegistry; import static com.minelittlepony.unicopia.Predicates.*; +import com.minelittlepony.unicopia.CloudType; +import com.minelittlepony.unicopia.UClient; +import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.edibles.BushToxicityDeterminent; import com.minelittlepony.unicopia.edibles.CookedToxicityDeterminent; import com.minelittlepony.unicopia.edibles.FlowerToxicityDeterminent; @@ -262,7 +265,7 @@ public class UItems { FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(juice), new ItemStack(burned_juice), 0); } - static void fixRecipes() { + public static void fixRecipes() { new OreReplacer() .registerAll(stack -> stack.getItem().getRegistryName().equals(red_apple.getRegistryName())) .done(); diff --git a/src/main/java/com/minelittlepony/unicopia/UMaterials.java b/src/main/java/com/minelittlepony/unicopia/init/UMaterials.java similarity index 82% rename from src/main/java/com/minelittlepony/unicopia/UMaterials.java rename to src/main/java/com/minelittlepony/unicopia/init/UMaterials.java index 52265d08..82993e5a 100644 --- a/src/main/java/com/minelittlepony/unicopia/UMaterials.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UMaterials.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia; +package com.minelittlepony.unicopia.init; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; diff --git a/src/main/java/com/minelittlepony/unicopia/UParticles.java b/src/main/java/com/minelittlepony/unicopia/init/UParticles.java similarity index 93% rename from src/main/java/com/minelittlepony/unicopia/UParticles.java rename to src/main/java/com/minelittlepony/unicopia/init/UParticles.java index 8e1a229b..9f8bf9a5 100644 --- a/src/main/java/com/minelittlepony/unicopia/UParticles.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UParticles.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia; +package com.minelittlepony.unicopia.init; import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.particle.client.ParticleUnicornMagic; @@ -21,7 +21,7 @@ public class UParticles { public static int DISK; @SideOnly(Side.CLIENT) - static void init() { + public static void init() { UNICORN_MAGIC = Particles.instance().registerParticle(ParticleUnicornMagic::new); RAIN_DROPS = Particles.instance().registerParticle(ParticleRaindrops::new); CHANGELING_MAGIC = Particles.instance().registerParticle(ParticleChanglingMagic::new); diff --git a/src/main/java/com/minelittlepony/unicopia/USounds.java b/src/main/java/com/minelittlepony/unicopia/init/USounds.java similarity index 83% rename from src/main/java/com/minelittlepony/unicopia/USounds.java rename to src/main/java/com/minelittlepony/unicopia/init/USounds.java index 4d86db3d..3453c6ca 100644 --- a/src/main/java/com/minelittlepony/unicopia/USounds.java +++ b/src/main/java/com/minelittlepony/unicopia/init/USounds.java @@ -1,4 +1,6 @@ -package com.minelittlepony.unicopia; +package com.minelittlepony.unicopia.init; + +import com.minelittlepony.unicopia.Unicopia; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; diff --git a/src/main/java/com/minelittlepony/unicopia/item/ItemApple.java b/src/main/java/com/minelittlepony/unicopia/item/ItemApple.java index c93ebd3d..7dbf1baa 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ItemApple.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ItemApple.java @@ -5,9 +5,9 @@ import java.util.function.Supplier; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.UItems; import com.minelittlepony.unicopia.edibles.IEdible; import com.minelittlepony.unicopia.edibles.Toxicity; +import com.minelittlepony.unicopia.init.UItems; import com.minelittlepony.util.collection.Pool; import com.minelittlepony.util.collection.Weighted; diff --git a/src/main/java/com/minelittlepony/unicopia/item/ItemStick.java b/src/main/java/com/minelittlepony/unicopia/item/ItemStick.java index bc354513..efc9d387 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ItemStick.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ItemStick.java @@ -1,6 +1,6 @@ package com.minelittlepony.unicopia.item; -import com.minelittlepony.unicopia.UBlocks; +import com.minelittlepony.unicopia.init.UBlocks; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.block.SoundType; diff --git a/src/main/java/com/minelittlepony/unicopia/player/Hooks.java b/src/main/java/com/minelittlepony/unicopia/player/Hooks.java new file mode 100644 index 00000000..bb643bb1 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/player/Hooks.java @@ -0,0 +1,90 @@ +package com.minelittlepony.unicopia.player; + +import com.minelittlepony.unicopia.Race; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.RayTraceResult; + +import net.minecraftforge.event.entity.ProjectileImpactEvent; +import net.minecraftforge.event.entity.item.ItemTossEvent; +import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; +import net.minecraftforge.event.entity.player.PlayerDropsEvent; +import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; + +@EventBusSubscriber +class Hooks { + @SubscribeEvent + public static void onPlayerTick(TickEvent.PlayerTickEvent event) { + if (event.phase == Phase.END) { + PlayerSpeciesList.instance().getPlayer(event.player).onUpdate(); + } else { + PlayerSpeciesList.instance().getPlayer(event.player).beforeUpdate(); + } + } + + @SubscribeEvent + public static void onPlayerTossItem(ItemTossEvent event) { + Race race = PlayerSpeciesList.instance().getPlayer(event.getPlayer()).getPlayerSpecies(); + + PlayerSpeciesList.instance().getEntity(event.getEntityItem()).setPlayerSpecies(race); + } + + @SubscribeEvent + public static void onPlayerDropItems(PlayerDropsEvent event) { + + Race race = PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).getPlayerSpecies(); + + event.getDrops().stream() + .map(PlayerSpeciesList.instance()::getEntity) + .forEach(item -> item.setPlayerSpecies(race)); + } + + @SubscribeEvent + public static void onPlayerFall(PlayerFlyableFallEvent event) { + PlayerSpeciesList.instance().getPlayer(event.getEntityPlayer()).onFall(event.getDistance(), event.getMultiplier()); + } + + @SubscribeEvent + public static void onProjectileHit(ProjectileImpactEvent event) { + RayTraceResult ray = event.getRayTraceResult(); + + if (!event.isCanceled() + && ray.typeOfHit == RayTraceResult.Type.ENTITY + && ray.entityHit instanceof EntityPlayer + && !PlayerSpeciesList.instance().getPlayer((EntityPlayer)ray.entityHit).onProjectileImpact(event.getEntity())) { + event.setCanceled(true); + } + } + + @SubscribeEvent + public static void onItemUseBegin(LivingEntityUseItemEvent.Start event) { + Entity e = event.getEntity(); + + if (!event.isCanceled() && e instanceof EntityPlayer) { + PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().begin(event.getItem()); + } + } + + @SubscribeEvent + public static void onItemUseCancel(LivingEntityUseItemEvent.Stop event) { + Entity e = event.getEntity(); + + if (!event.isCanceled() && e instanceof EntityPlayer) { + PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().end(); + } + } + + @SubscribeEvent + public static void onItemUseFinish(LivingEntityUseItemEvent.Finish event) { + Entity e = event.getEntity(); + + if (!event.isCanceled() && e instanceof EntityPlayer) { + PlayerSpeciesList.instance().getPlayer((EntityPlayer)e).getFood().finish(); + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java b/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java index cd869422..c310b491 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java +++ b/src/main/java/com/minelittlepony/unicopia/player/IPlayer.java @@ -122,11 +122,6 @@ public interface IPlayer extends ICaster, IRaceContainer The type of owner */ -public interface IRaceContainer extends InbtSerialisable, IUpdatable { +public interface IRaceContainer extends InbtSerialisable { Race getPlayerSpecies(); void setPlayerSpecies(Race race); void onDimensionalTravel(int destinationDimension); + + /** + * Called to update this container's logic + */ + void onUpdate(); + + /** + * Called at the beginning of a player's update cycle. + */ + void beforeUpdate(); } diff --git a/src/main/java/com/minelittlepony/unicopia/player/IUpdatable.java b/src/main/java/com/minelittlepony/unicopia/player/IUpdatable.java index 532052b1..2cda63ba 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/IUpdatable.java +++ b/src/main/java/com/minelittlepony/unicopia/player/IUpdatable.java @@ -1,7 +1,5 @@ package com.minelittlepony.unicopia.player; -import net.minecraft.entity.Entity; - -public interface IUpdatable { - void onUpdate(T entity); +public interface IUpdatable { + void onUpdate(T sender); } diff --git a/src/main/java/com/minelittlepony/unicopia/player/ItemCapabilities.java b/src/main/java/com/minelittlepony/unicopia/player/ItemCapabilities.java index 00b4f4c4..249aa4ef 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/ItemCapabilities.java +++ b/src/main/java/com/minelittlepony/unicopia/player/ItemCapabilities.java @@ -12,7 +12,12 @@ class ItemCapabilities implements IRaceContainer, IOwned private EntityItem owner; @Override - public void onUpdate(EntityItem entity) { + public void onUpdate() { + + } + + @Override + public void beforeUpdate() { } diff --git a/src/main/java/com/minelittlepony/unicopia/player/PlayerAbilityDelegate.java b/src/main/java/com/minelittlepony/unicopia/player/PlayerAbilityDelegate.java index 817f90a3..76a817a7 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/PlayerAbilityDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/player/PlayerAbilityDelegate.java @@ -159,7 +159,7 @@ class PlayerAbilityDelegate implements IAbilityReceiver, IUpdatable drops, int fortune) { + Block block = state.getBlock(); + + int fortuneFactor = 1 + fortune * 15; + + if (block == Blocks.STONE) { + if (world.rand.nextInt(500 / fortuneFactor) == 0) { + for (int i = 0; i < 1 + fortune; i++) { + if (world.rand.nextInt(10) > 3) { + drops.add(new ItemStack(UItems.curse)); + } else { + drops.add(new ItemStack(UItems.spell)); + } + } + } + + if (world.rand.nextInt(5000) == 0) { + drops.add(SpellRegistry.instance().enchantStack(new ItemStack(UItems.spell), "awkward")); + } + } else if (block instanceof BlockTallGrass) { + if (world.rand.nextInt(25 / fortuneFactor) == 0) { + for (int i = 0; i < 1 + fortune; i++) { + int chance = world.rand.nextInt(3); + + if (chance == 0) { + drops.add(new ItemStack(UItems.alfalfa_seeds)); + } else if (chance == 1) { + drops.add(new ItemStack(UItems.apple_seeds)); + } else { + drops.add(new ItemStack(UItems.tomato_seeds)); + } + } + } + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/world/Hooks.java b/src/main/java/com/minelittlepony/unicopia/world/Hooks.java new file mode 100644 index 00000000..86af0ec4 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/world/Hooks.java @@ -0,0 +1,41 @@ +package com.minelittlepony.unicopia.world; + +import net.minecraftforge.event.entity.player.UseHoeEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; +import net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.eventhandler.Event.Result; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; + +@EventBusSubscriber +class Hooks { + + @SubscribeEvent + public static void onBlockHarvested(BlockEvent.HarvestDropsEvent event) { + UWorld.instance().getBlocks().addAuxiliaryDrops(event.getWorld(), event.getState(), event.getPos(), event.getDrops(), event.getFortuneLevel()); + } + + @SubscribeEvent + public static void onBlockTilled(UseHoeEvent event) { + if (UWorld.instance().getBlocks().onBlockTilled(event.getWorld(), event.getPos(), event.getEntityPlayer(), event.getCurrent())) { + event.setResult(Result.ALLOW); + } + } + + @SubscribeEvent + public static void onStructureGen(PopulateChunkEvent.Populate event) { + if (event.getType() == EventType.DUNGEON) { + UWorld.instance().generateStructures(event.getWorld(), event.getChunkX(), event.getChunkZ(), event.getGen()); + } + } + + @SubscribeEvent + public static void onWorldTick(TickEvent.WorldTickEvent event) { + if (event.phase == Phase.START) { + UWorld.instance().onUpdate(event.world); + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/world/UWorld.java b/src/main/java/com/minelittlepony/unicopia/world/UWorld.java index 5db933ea..13d6dd70 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/UWorld.java +++ b/src/main/java/com/minelittlepony/unicopia/world/UWorld.java @@ -6,6 +6,9 @@ import java.util.Random; import com.google.common.collect.Queues; import com.minelittlepony.jumpingcastle.Exceptions; import com.minelittlepony.unicopia.Unicopia; +import com.minelittlepony.unicopia.player.IUpdatable; +import com.minelittlepony.unicopia.structure.CloudDungeon; +import com.minelittlepony.unicopia.structure.GroundDungeon; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; @@ -13,10 +16,11 @@ import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.ChunkGeneratorOverworld; import net.minecraft.world.gen.IChunkGenerator; +import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraftforge.fml.common.IWorldGenerator; import net.minecraftforge.fml.common.registry.GameRegistry; -public class UWorld implements IWorldGenerator { +public class UWorld implements IWorldGenerator, IUpdatable { private static final UWorld instance = new UWorld(); @@ -28,7 +32,28 @@ public class UWorld implements IWorldGenerator { private static final Object locker = new Object(); - public static void tick(World world) { + public static void enqueueTask(Runnable task) { + synchronized (locker) { + tickTasks.add(task); + } + } + + private final BlockInteractions blocks = new BlockInteractions(); + + private final CloudGen cloudsGen = new CloudGen(); + private final StructuresGen structuresGen = new StructuresGen(); + + public void init() { + GameRegistry.registerWorldGenerator(this, 1); + + MapGenStructureIO.registerStructure(CloudGen.Start.class, "unicopia:clouds"); + MapGenStructureIO.registerStructure(StructuresGen.Start.class, "unicopia:ruins"); + MapGenStructureIO.registerStructureComponent(CloudDungeon.class, "unicopia:cloud_dungeon"); + MapGenStructureIO.registerStructureComponent(GroundDungeon.class, "unicopia:ground_dungeon"); + } + + @Override + public void onUpdate(World world) { synchronized (locker) { Runnable task; while ((task = tickTasks.poll()) != null) { @@ -37,17 +62,8 @@ public class UWorld implements IWorldGenerator { } } - public static void enqueueTask(Runnable task) { - synchronized (locker) { - tickTasks.add(task); - } - } - - private CloudGen cloudsGen = new CloudGen(); - private StructuresGen structuresGen = new StructuresGen(); - - public void init() { - GameRegistry.registerWorldGenerator(this, 1); + public BlockInteractions getBlocks() { + return blocks; } public void generateStructures(World world, int chunkX, int chunkZ, IChunkGenerator gen) {