mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-08 06:26:43 +01:00
Restructure! Remove all the subscribe events and shove them _waaaaaay_ in the back there.
This commit is contained in:
parent
6a7c3131cc
commit
afdec48090
56 changed files with 544 additions and 454 deletions
83
src/main/java/com/minelittlepony/unicopia/ClientHooks.java
Normal file
83
src/main/java/com/minelittlepony/unicopia/ClientHooks.java
Normal file
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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() {}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ public class UConfig {
|
|||
.setPrettyPrinting()
|
||||
.create();
|
||||
|
||||
public static UConfig getInstance() {
|
||||
public static UConfig instance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
|
|
@ -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<Item> event) {
|
||||
UItems.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerBlocks(RegistryEvent.Register<Block> event) {
|
||||
UBlocks.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerPotions(RegistryEvent.Register<Potion> event) {
|
||||
UEffects.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerSounds(RegistryEvent.Register<SoundEvent> event) {
|
||||
USounds.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerEntities(RegistryEvent.Register<EntityEntry> 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
|
||||
|
|
|
@ -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<GuiButton> 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<Integer> possibleXCandidates = list(layout.getColumns());
|
||||
List<Integer> 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,121 +140,40 @@ 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<Integer> possibleXCandidates = list(layout.getColumns());
|
||||
List<Integer> 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)) {
|
||||
event.setCanceled(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (iplayer.isInvisible()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@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();
|
||||
return false;
|
||||
}
|
||||
|
||||
@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) {
|
||||
public void tick() {
|
||||
EntityPlayer player = UClient.instance().getPlayer();
|
||||
|
||||
if (player != null && !player.isDead) {
|
||||
|
@ -253,26 +182,10 @@ public class UnicopiaClient extends UClient {
|
|||
if (newRace != clientPlayerRace) {
|
||||
clientPlayerRace = newRace;
|
||||
|
||||
Unicopia.channel.send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER);
|
||||
Unicopia.getConnection().send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER);
|
||||
}
|
||||
}
|
||||
|
||||
Keyboard.getKeyHandler().onKeyInput();
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@SubscribeEvent
|
||||
public static void setupPlayerCamera(EntityViewRenderEvent.CameraSetup event) {
|
||||
|
||||
EntityPlayer player = UClient.instance().getPlayer();
|
||||
|
||||
if (player != null) {
|
||||
IView view = PlayerSpeciesList.instance().getPlayer(player).getCamera();
|
||||
|
||||
event.setRoll(view.calculateRoll());
|
||||
event.setPitch(view.calculatePitch(event.getPitch()));
|
||||
event.setYaw(view.calculateYaw(event.getYaw()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
39
src/main/java/com/minelittlepony/unicopia/init/Hooks.java
Normal file
39
src/main/java/com/minelittlepony/unicopia/init/Hooks.java
Normal file
|
@ -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<Item> event) {
|
||||
UItems.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerBlocks(RegistryEvent.Register<Block> event) {
|
||||
UBlocks.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerPotions(RegistryEvent.Register<Potion> event) {
|
||||
UEffects.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerSounds(RegistryEvent.Register<SoundEvent> event) {
|
||||
USounds.init(event.getRegistry());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerEntities(RegistryEvent.Register<EntityEntry> event) {
|
||||
UEntities.init(event.getRegistry());
|
||||
}
|
||||
}
|
|
@ -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;
|
|
@ -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;
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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();
|
|
@ -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;
|
|
@ -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);
|
|
@ -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;
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
90
src/main/java/com/minelittlepony/unicopia/player/Hooks.java
Normal file
90
src/main/java/com/minelittlepony/unicopia/player/Hooks.java
Normal file
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -122,11 +122,6 @@ public interface IPlayer extends ICaster<EntityPlayer>, IRaceContainer<EntityPla
|
|||
*/
|
||||
boolean onProjectileImpact(Entity projectile);
|
||||
|
||||
/**
|
||||
* Called at the beginning of a player's update cycle.
|
||||
*/
|
||||
void beforeUpdate(EntityPlayer entity);
|
||||
|
||||
/**
|
||||
* Returns true if this player is the use.
|
||||
*/
|
||||
|
|
|
@ -10,10 +10,20 @@ import net.minecraft.entity.Entity;
|
|||
*
|
||||
* @param <T> The type of owner
|
||||
*/
|
||||
public interface IRaceContainer<T extends Entity> extends InbtSerialisable, IUpdatable<T> {
|
||||
public interface IRaceContainer<T extends Entity> 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();
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package com.minelittlepony.unicopia.player;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
|
||||
public interface IUpdatable<T extends Entity> {
|
||||
void onUpdate(T entity);
|
||||
public interface IUpdatable<T> {
|
||||
void onUpdate(T sender);
|
||||
}
|
||||
|
|
|
@ -12,7 +12,12 @@ class ItemCapabilities implements IRaceContainer<EntityItem>, IOwned<EntityItem>
|
|||
private EntityItem owner;
|
||||
|
||||
@Override
|
||||
public void onUpdate(EntityItem entity) {
|
||||
public void onUpdate() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeUpdate() {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ class PlayerAbilityDelegate implements IAbilityReceiver, IUpdatable<EntityPlayer
|
|||
IData data = ability.tryActivate(player);
|
||||
|
||||
if (data != null) {
|
||||
Unicopia.channel.send(new MsgPlayerAbility(player.getOwner(), ability, data), Target.SERVER);
|
||||
Unicopia.getConnection().send(new MsgPlayerAbility(player.getOwner(), ability, data), Target.SERVER);
|
||||
}
|
||||
|
||||
return data != null;
|
||||
|
|
|
@ -8,9 +8,9 @@ import com.google.common.collect.Maps;
|
|||
import com.minelittlepony.model.anim.BasicEasingInterpolator;
|
||||
import com.minelittlepony.model.anim.IInterpolator;
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UEffects;
|
||||
import com.minelittlepony.unicopia.Unicopia;
|
||||
import com.minelittlepony.unicopia.enchanting.PageState;
|
||||
import com.minelittlepony.unicopia.init.UEffects;
|
||||
import com.minelittlepony.unicopia.network.EffectSync;
|
||||
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
|
||||
import com.minelittlepony.unicopia.spell.IMagicEffect;
|
||||
|
@ -146,9 +146,9 @@ class PlayerCapabilities implements IPlayer {
|
|||
|
||||
if (!getWorld().isRemote) {
|
||||
if (full) {
|
||||
Unicopia.channel.broadcast(new MsgPlayerCapabilities(this));
|
||||
Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(this));
|
||||
} else {
|
||||
Unicopia.channel.broadcast(new MsgPlayerCapabilities(getPlayerSpecies(), getOwner()));
|
||||
Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(getPlayerSpecies(), getOwner()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ class PlayerCapabilities implements IPlayer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void beforeUpdate(EntityPlayer entity) {
|
||||
public void beforeUpdate() {
|
||||
if (entity.world.isRemote) {
|
||||
if (entity.isRiding() && entity.isSneaking()) {
|
||||
|
||||
|
@ -197,7 +197,7 @@ class PlayerCapabilities implements IPlayer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(EntityPlayer entity) {
|
||||
public void onUpdate() {
|
||||
powers.onUpdate(entity);
|
||||
gravity.onUpdate(entity);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.minelittlepony.unicopia.player;
|
||||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.USounds;
|
||||
import com.minelittlepony.unicopia.init.USounds;
|
||||
import com.minelittlepony.unicopia.mixin.MixinEntity;
|
||||
import com.minelittlepony.unicopia.spell.IMagicEffect;
|
||||
import com.minelittlepony.unicopia.util.serialisation.InbtSerialisable;
|
||||
|
|
|
@ -21,17 +21,17 @@ public class PlayerSpeciesList {
|
|||
}
|
||||
|
||||
public boolean whiteListRace(Race race) {
|
||||
boolean result = UConfig.getInstance().getSpeciesWhiteList().add(race);
|
||||
boolean result = UConfig.instance().getSpeciesWhiteList().add(race);
|
||||
|
||||
UConfig.getInstance().save();
|
||||
UConfig.instance().save();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean unwhiteListRace(Race race) {
|
||||
boolean result = UConfig.getInstance().getSpeciesWhiteList().remove(race);
|
||||
boolean result = UConfig.instance().getSpeciesWhiteList().remove(race);
|
||||
|
||||
UConfig.getInstance().save();
|
||||
UConfig.instance().save();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public class PlayerSpeciesList {
|
|||
return false;
|
||||
}
|
||||
|
||||
return race.isDefault() || UConfig.getInstance().getSpeciesWhiteList().isEmpty() || UConfig.getInstance().getSpeciesWhiteList().contains(race);
|
||||
return race.isDefault() || UConfig.instance().getSpeciesWhiteList().isEmpty() || UConfig.instance().getSpeciesWhiteList().contains(race);
|
||||
}
|
||||
|
||||
public Race validate(Race race, EntityPlayer sender) {
|
||||
|
@ -69,7 +69,7 @@ public class PlayerSpeciesList {
|
|||
}
|
||||
|
||||
@Nullable
|
||||
public IPlayer getPlayer(EntityPlayer player) {
|
||||
public IPlayer getPlayer(@Nullable EntityPlayer player) {
|
||||
if (player == null) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.power;
|
|||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.entity.EntityCloud;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
import com.minelittlepony.unicopia.power.data.Numeric;
|
||||
import com.minelittlepony.util.vector.VecHelper;
|
||||
|
|
|
@ -6,8 +6,8 @@ import javax.annotation.Nullable;
|
|||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.entity.IInAnimate;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
|
||||
import com.minelittlepony.unicopia.power.data.Hit;
|
||||
|
|
|
@ -8,7 +8,7 @@ import javax.annotation.Nullable;
|
|||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
import com.minelittlepony.unicopia.power.data.Hit;
|
||||
import com.minelittlepony.util.MagicalDamageSource;
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
|
|||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
import com.minelittlepony.unicopia.power.data.Location;
|
||||
import com.minelittlepony.util.WorldEvent;
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
|
|||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
import com.minelittlepony.unicopia.power.data.Hit;
|
||||
import com.minelittlepony.unicopia.spell.SpellShield;
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
|
|||
import org.lwjgl.input.Keyboard;
|
||||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
import com.minelittlepony.unicopia.power.data.Location;
|
||||
import com.minelittlepony.util.vector.VecHelper;
|
||||
|
|
|
@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.spell;
|
|||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
|
||||
public class GenericSpell extends AbstractSpell {
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.minelittlepony.unicopia.spell;
|
||||
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.entity.EntitySpell;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.particle.Particles;
|
||||
import com.minelittlepony.util.shape.IShape;
|
||||
import com.minelittlepony.util.shape.Line;
|
||||
|
|
|
@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.spell;
|
|||
import java.util.Random;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.entity.EntitySpell;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.particle.Particles;
|
||||
import com.minelittlepony.util.MagicalDamageSource;
|
||||
import com.minelittlepony.util.PosHelper;
|
||||
|
|
|
@ -7,7 +7,7 @@ import javax.annotation.Nullable;
|
|||
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.UClient;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.mixin.MixinEntity;
|
||||
import com.minelittlepony.unicopia.player.IFlyingPredicate;
|
||||
import com.minelittlepony.unicopia.player.IOwned;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.minelittlepony.unicopia.spell;
|
||||
|
||||
import com.minelittlepony.unicopia.UMaterials;
|
||||
import com.minelittlepony.unicopia.init.UMaterials;
|
||||
import com.minelittlepony.util.MagicalDamageSource;
|
||||
import com.minelittlepony.util.PosHelper;
|
||||
import com.minelittlepony.util.collection.IStateMapping;
|
||||
|
|
|
@ -7,9 +7,9 @@ import java.util.UUID;
|
|||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.entity.EntitySpell;
|
||||
import com.minelittlepony.unicopia.entity.IMagicals;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.particle.Particles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.minelittlepony.unicopia.spell;
|
||||
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.particle.Particles;
|
||||
import com.minelittlepony.util.shape.IShape;
|
||||
import com.minelittlepony.util.shape.Sphere;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.minelittlepony.unicopia.spell;
|
||||
|
||||
import com.minelittlepony.unicopia.Predicates;
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.particle.ParticleConnection;
|
||||
import com.minelittlepony.unicopia.particle.Particles;
|
||||
import com.minelittlepony.unicopia.player.IPlayer;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.minelittlepony.unicopia.spell;
|
||||
|
||||
import com.minelittlepony.unicopia.UParticles;
|
||||
import com.minelittlepony.unicopia.init.UParticles;
|
||||
import com.minelittlepony.unicopia.particle.Particles;
|
||||
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
|
||||
import com.minelittlepony.util.MagicalDamageSource;
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
package com.minelittlepony.unicopia.world;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.minelittlepony.unicopia.block.ITillable;
|
||||
import com.minelittlepony.unicopia.init.UItems;
|
||||
import com.minelittlepony.unicopia.spell.SpellRegistry;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockTallGrass;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockInteractions {
|
||||
public boolean onBlockTilled(World world, BlockPos pos, EntityPlayer player, ItemStack hoe) {
|
||||
IBlockState state = world.getBlockState(pos);
|
||||
|
||||
if (!(state.getBlock() instanceof ITillable)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ITillable farm = ((ITillable)state.getBlock());
|
||||
|
||||
if (!farm.canBeTilled(hoe, player, world, state, pos)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
world.setBlockState(pos, farm.getFarmlandState(hoe, player, world, state, pos));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addAuxiliaryDrops(World world, IBlockState state, BlockPos pos, List<ItemStack> 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
41
src/main/java/com/minelittlepony/unicopia/world/Hooks.java
Normal file
41
src/main/java/com/minelittlepony/unicopia/world/Hooks.java
Normal file
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<World> {
|
||||
|
||||
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) {
|
||||
|
|
Loading…
Reference in a new issue