Restructure! Remove all the subscribe events and shove them _waaaaaay_ in the back there.

This commit is contained in:
Sollace 2019-02-17 01:08:19 +02:00
parent 6a7c3131cc
commit afdec48090
56 changed files with 544 additions and 454 deletions

View 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()));
}
}
}

View file

@ -7,23 +7,21 @@ import javax.annotation.Nullable;
import com.minelittlepony.unicopia.entity.EntityFakeServerPlayer; import com.minelittlepony.unicopia.entity.EntityFakeServerPlayer;
import com.minelittlepony.unicopia.forgebullshit.FUF; import com.minelittlepony.unicopia.forgebullshit.FUF;
import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.IInteractionObject; import net.minecraft.world.IInteractionObject;
import net.minecraft.world.WorldServer; 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 { public class UClient {
private static UClient instance; private static UClient instance;
public static boolean isClientSide() { public static boolean isClientSide() {
return FMLCommonHandler.instance().getSide().isClient(); return net.minecraftforge.fml.common.FMLCommonHandler.instance().getSide().isClient();
} }
@FUF(reason = "Forced client Separation") @FUF(reason = "Forced client Separation")
@ -50,6 +48,11 @@ public class UClient {
return null; return null;
} }
@Nullable
public IPlayer getIPlayer() {
return PlayerSpeciesList.instance().getPlayer(getPlayer());
}
@FUF(reason = "Forced client Separation") @FUF(reason = "Forced client Separation")
@Nullable @Nullable
public EntityPlayer getPlayerByUUID(UUID playerId) { public EntityPlayer getPlayerByUUID(UUID playerId) {
@ -75,9 +78,15 @@ public class UClient {
return new EntityFakeServerPlayer((WorldServer)observer.world, profile); 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() {}
} }

View file

@ -24,7 +24,7 @@ public class UConfig {
.setPrettyPrinting() .setPrettyPrinting()
.create(); .create();
public static UConfig getInstance() { public static UConfig instance() {
return instance; return instance;
} }

View file

@ -1,46 +1,19 @@
package com.minelittlepony.unicopia; 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.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.item.crafting.IRecipe;
import net.minecraft.potion.Potion;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.structure.MapGenStructureIO;
import net.minecraftforge.common.MinecraftForge; 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;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent; 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.IGuiHandler;
import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.EntityEntry;
import java.util.Map; import java.util.Map;
import java.util.function.Function; 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.IChannel;
import com.minelittlepony.jumpingcastle.api.JumpingCastle; import com.minelittlepony.jumpingcastle.api.JumpingCastle;
import com.minelittlepony.unicopia.advancements.UAdvancements; import com.minelittlepony.unicopia.advancements.UAdvancements;
import com.minelittlepony.unicopia.block.ITillable;
import com.minelittlepony.unicopia.command.Commands; import com.minelittlepony.unicopia.command.Commands;
import com.minelittlepony.unicopia.enchanting.Pages; import com.minelittlepony.unicopia.enchanting.Pages;
import com.minelittlepony.unicopia.enchanting.SpellRecipe; import com.minelittlepony.unicopia.enchanting.SpellRecipe;
import com.minelittlepony.unicopia.forgebullshit.FBS; 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.ContainerSpellBook;
import com.minelittlepony.unicopia.inventory.gui.GuiSpellBook; import com.minelittlepony.unicopia.inventory.gui.GuiSpellBook;
import com.minelittlepony.unicopia.network.MsgPlayerAbility; import com.minelittlepony.unicopia.network.MsgPlayerAbility;
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities; import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
import com.minelittlepony.unicopia.network.MsgRequestCapabilities; import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.minelittlepony.unicopia.power.PowersRegistry; 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.util.crafting.CraftingManager;
import com.minelittlepony.unicopia.world.CloudGen;
import com.minelittlepony.unicopia.world.StructuresGen;
import com.minelittlepony.unicopia.world.UWorld; import com.minelittlepony.unicopia.world.UWorld;
@Mod( @Mod(
@ -78,36 +45,37 @@ import com.minelittlepony.unicopia.world.UWorld;
version = Unicopia.VERSION, version = Unicopia.VERSION,
dependencies = "required-after:jumpingcastle" dependencies = "required-after:jumpingcastle"
) )
@EventBusSubscriber
public class Unicopia implements IGuiHandler { public class Unicopia implements IGuiHandler {
public static final String MODID = "unicopia"; public static final String MODID = "unicopia";
public static final String NAME = "@NAME@"; public static final String NAME = "@NAME@";
public static final String VERSION = "@VERSION@"; public static final String VERSION = "@VERSION@";
public static final Logger log = LogManager.getLogger(); public static final Logger log = LogManager.getLogger();
public static IChannel channel; private static IChannel channel;
private static CraftingManager craftingManager; private static CraftingManager craftingManager;
public static CraftingManager getCraftingManager() {
return craftingManager;
}
public static IChannel getConnection() {
return channel;
}
@EventHandler @EventHandler
public void preInit(FMLPreInitializationEvent event) { public void preInit(FMLPreInitializationEvent event) {
UConfig.init(event.getModConfigurationDirectory()); UConfig.init(event.getModConfigurationDirectory());
UClient.instance().preInit(event); UClient.instance().preInit();
UWorld.instance().init(); UWorld.instance().init();
MinecraftForge.TERRAIN_GEN_BUS.register(Unicopia.class); MinecraftForge.TERRAIN_GEN_BUS.register(Unicopia.class);
} }
@FUF(reason = "Why u no run!?!??!") @EventHandler
@SubscribeEvent public void onServerStart(FMLServerStartingEvent event) {
public static void onStructureGenStatic(PopulateChunkEvent.Populate event) { Commands.init(event);
if (event.getType() == EventType.DUNGEON) {
UWorld.instance().generateStructures(event.getWorld(), event.getChunkX(), event.getChunkZ(), event.getGen());
}
} }
@EventHandler @EventHandler
@ -125,7 +93,7 @@ public class Unicopia implements IGuiHandler {
NetworkRegistry.INSTANCE.registerGuiHandler(this, this); NetworkRegistry.INSTANCE.registerGuiHandler(this, this);
UClient.instance().init(event); UClient.instance().init();
} }
@EventHandler @EventHandler
@ -142,181 +110,9 @@ public class Unicopia implements IGuiHandler {
Pages.instance().load(); Pages.instance().load();
Biome.REGISTRY.forEach(UEntities::registerSpawnEntries); Biome.REGISTRY.forEach(UEntities::registerSpawnEntries);
UClient.instance().posInit(event); UClient.instance().posInit();
UItems.fixRecipes(); 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 @Override

View file

@ -8,12 +8,12 @@ import javax.annotation.Nullable;
import com.minelittlepony.jumpingcastle.api.Target; import com.minelittlepony.jumpingcastle.api.Target;
import com.minelittlepony.unicopia.entity.EntityFakeClientPlayer; 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.input.Keyboard;
import com.minelittlepony.unicopia.inventory.gui.GuiOfHolding; import com.minelittlepony.unicopia.inventory.gui.GuiOfHolding;
import com.minelittlepony.unicopia.network.MsgRequestCapabilities; import com.minelittlepony.unicopia.network.MsgRequestCapabilities;
import com.minelittlepony.unicopia.player.IPlayer; import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.IView;
import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.minelittlepony.unicopia.render.DisguiseRenderer; import com.minelittlepony.unicopia.render.DisguiseRenderer;
import com.minelittlepony.util.gui.ButtonGridLayout; 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.audio.PositionedSoundRecord;
import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.GuiButton; 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.client.resources.I18n;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents; import net.minecraft.init.SoundEvents;
import net.minecraft.world.IInteractionObject; 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.*; import static com.minelittlepony.util.gui.ButtonGridLayout.*;
@EventBusSubscriber(Side.CLIENT)
public class UnicopiaClient extends UClient { public class UnicopiaClient extends UClient {
/** /**
@ -64,7 +45,7 @@ public class UnicopiaClient extends UClient {
private static Race clientPlayerRace = getclientPlayerRace(); private static Race clientPlayerRace = getclientPlayerRace();
private static Race getclientPlayerRace() { private static Race getclientPlayerRace() {
if (!UConfig.getInstance().ignoresMineLittlePony() if (!UConfig.instance().ignoresMineLittlePony()
&& Minecraft.getMinecraft().player != null) { && Minecraft.getMinecraft().player != null) {
Race race = MineLP.getPlayerPonyRace(); 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 @Override
public void displayGuiToPlayer(EntityPlayer player, IInteractionObject inventory) { public void displayGuiToPlayer(EntityPlayer player, IInteractionObject inventory) {
@ -130,149 +140,52 @@ public class UnicopiaClient extends UClient {
return Minecraft.getMinecraft().gameSettings.thirdPersonView; return Minecraft.getMinecraft().gameSettings.thirdPersonView;
} }
@SideOnly(Side.CLIENT) @Override
@SubscribeEvent public boolean renderEntity(Entity entity, float renderPartialTicks) {
public static void onDisplayGui(GuiScreenEvent.InitGuiEvent.Post event) {
if (event.getGui() instanceof GuiOptions || event.getGui() instanceof GuiShareToLan) {
addUniButton(event);
}
}
static void addUniButton(GuiScreenEvent.InitGuiEvent.Post event) { if (DisguiseRenderer.instance().renderDisguise(entity, renderPartialTicks)) {
ButtonGridLayout layout = new ButtonGridLayout(event.getButtonList()); return true;
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 (entity instanceof EntityPlayer) { if (entity instanceof EntityPlayer) {
IPlayer iplayer = PlayerSpeciesList.instance().getPlayer((EntityPlayer)entity); IPlayer iplayer = PlayerSpeciesList.instance().getPlayer((EntityPlayer)entity);
if (iplayer.isInvisible()) { if (DisguiseRenderer.instance().renderDisguiseToGui(iplayer)) {
event.setCanceled(true); return true;
} }
if (DisguiseRenderer.instance().renderDisguiseToGui(iplayer)) { if (iplayer.isInvisible()) {
event.setCanceled(true); 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 @Override
public void preInit(FMLPreInitializationEvent event) { public void preInit() {
UEntities.preInit(); UEntities.preInit();
UParticles.init(); UParticles.init();
} }
@SideOnly(Side.CLIENT)
@Override @Override
public void init(FMLInitializationEvent event) { public void init() {
clientPlayerRace = getclientPlayerRace(); clientPlayerRace = getclientPlayerRace();
} }
@SideOnly(Side.CLIENT) public void tick() {
@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) {
EntityPlayer player = UClient.instance().getPlayer(); EntityPlayer player = UClient.instance().getPlayer();
if (player != null) { if (player != null && !player.isDead) {
IView view = PlayerSpeciesList.instance().getPlayer(player).getCamera(); Race newRace = getclientPlayerRace();
event.setRoll(view.calculateRoll()); if (newRace != clientPlayerRace) {
event.setPitch(view.calculatePitch(event.getPitch())); clientPlayerRace = newRace;
event.setYaw(view.calculateYaw(event.getYaw()));
Unicopia.getConnection().send(new MsgRequestCapabilities(player, clientPlayerRace), Target.SERVER);
}
} }
Keyboard.getKeyHandler().onKeyInput();
} }
} }

View file

@ -4,7 +4,7 @@ import java.util.Random;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.UItems; import com.minelittlepony.unicopia.init.UItems;
import net.minecraft.block.BlockCrops; import net.minecraft.block.BlockCrops;
import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.properties.PropertyEnum;

View file

@ -5,7 +5,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType; import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UBlocks; import com.minelittlepony.unicopia.init.UBlocks;
import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import net.minecraft.block.Block; import net.minecraft.block.Block;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.block;
import java.util.Random; import java.util.Random;
import com.minelittlepony.unicopia.CloudType; 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.BlockDoor;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;

View file

@ -5,7 +5,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType; 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.SoundType;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;

View file

@ -5,7 +5,7 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType; 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.BlockFence;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;

View file

@ -6,7 +6,7 @@ import java.util.Random;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.CloudType; 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.BlockSlab;
import net.minecraft.block.BlockStairs; import net.minecraft.block.BlockStairs;

View file

@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.block;
import java.util.Random; import java.util.Random;
import com.minelittlepony.unicopia.CloudType; import com.minelittlepony.unicopia.CloudType;
import com.minelittlepony.unicopia.UItems; import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.unicopia.UParticles; import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.particle.Particles;
import net.minecraft.block.BlockTorch; import net.minecraft.block.BlockTorch;

View file

@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.block;
import java.util.Random; import java.util.Random;
import com.minelittlepony.unicopia.UItems; import com.minelittlepony.unicopia.init.UItems;
import net.minecraft.block.BlockCrops; import net.minecraft.block.BlockCrops;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;

View file

@ -6,8 +6,8 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UEffects;
import com.minelittlepony.unicopia.forgebullshit.IMultiItem; import com.minelittlepony.unicopia.forgebullshit.IMultiItem;
import com.minelittlepony.unicopia.init.UEffects;
import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.advancements.CriteriaTriggers;

View file

@ -5,7 +5,7 @@ import java.util.ArrayList;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; 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.inventory.InventorySpellBook;
import com.minelittlepony.unicopia.spell.SpellRegistry; import com.minelittlepony.unicopia.spell.SpellRegistry;

View file

@ -4,10 +4,10 @@ import java.util.Map;
import com.minelittlepony.unicopia.Predicates; import com.minelittlepony.unicopia.Predicates;
import com.minelittlepony.unicopia.Race; 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.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.particle.Particles;
import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.player.PlayerSpeciesList;

View file

@ -6,7 +6,7 @@ import org.apache.commons.lang3.StringUtils;
import com.minelittlepony.unicopia.Predicates; import com.minelittlepony.unicopia.Predicates;
import com.minelittlepony.unicopia.Race; 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.item.ICastable;
import com.minelittlepony.unicopia.network.EffectSync; import com.minelittlepony.unicopia.network.EffectSync;
import com.minelittlepony.unicopia.spell.ICaster; import com.minelittlepony.unicopia.spell.ICaster;

View file

@ -1,8 +1,8 @@
package com.minelittlepony.unicopia.entity; package com.minelittlepony.unicopia.entity;
import com.minelittlepony.unicopia.Predicates; import com.minelittlepony.unicopia.Predicates;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.init.UItems;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;
import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLiving;

View file

@ -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());
}
}

View 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());
}
}

View file

@ -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.BlockAlfalfa;
import com.minelittlepony.unicopia.block.BlockFruitLeaves; import com.minelittlepony.unicopia.block.BlockFruitLeaves;
import com.minelittlepony.unicopia.block.BlockGlowingGem; import com.minelittlepony.unicopia.block.BlockGlowingGem;

View file

@ -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 com.minelittlepony.unicopia.potion.UPotion;
import net.minecraft.init.MobEffects; import net.minecraft.init.MobEffects;

View file

@ -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.EntityCloud;
import com.minelittlepony.unicopia.entity.EntityConstructionCloud; import com.minelittlepony.unicopia.entity.EntityConstructionCloud;
import com.minelittlepony.unicopia.entity.EntityRacingCloud; 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(EntityCloud.class, RenderCloud::new);
RenderingRegistry.registerEntityRenderingHandler(EntitySpell.class, RenderGem::new); RenderingRegistry.registerEntityRenderingHandler(EntitySpell.class, RenderGem::new);
RenderingRegistry.registerEntityRenderingHandler(EntityProjectile.class, RenderProjectile::new); RenderingRegistry.registerEntityRenderingHandler(EntityProjectile.class, RenderProjectile::new);
@ -52,7 +53,7 @@ public class UEntities {
RenderingRegistry.registerEntityRenderingHandler(EntityRainbow.class, RenderRainbow::new); RenderingRegistry.registerEntityRenderingHandler(EntityRainbow.class, RenderRainbow::new);
} }
static void registerSpawnEntries(Biome biome) { public static void registerSpawnEntries(Biome biome) {
if (!(biome instanceof BiomeHell || biome instanceof BiomeEnd)) { if (!(biome instanceof BiomeHell || biome instanceof BiomeEnd)) {
BiomeBS.addSpawnEntry(biome, EnumCreatureType.AMBIENT, EntityWildCloud.class, b -> 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); BiomeBS.addSpawnEntry(biome, EnumCreatureType.CREATURE, EntityRainbow.Spawner.class, b -> EntityRainbow.SPAWN_ENTRY);
} }
} }
} }

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia; package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.item.ItemApple; import com.minelittlepony.unicopia.item.ItemApple;
import com.minelittlepony.unicopia.item.ItemAppleMultiType; import com.minelittlepony.unicopia.item.ItemAppleMultiType;
@ -43,6 +43,9 @@ import net.minecraftforge.registries.IForgeRegistry;
import static com.minelittlepony.unicopia.Predicates.*; 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.BushToxicityDeterminent;
import com.minelittlepony.unicopia.edibles.CookedToxicityDeterminent; import com.minelittlepony.unicopia.edibles.CookedToxicityDeterminent;
import com.minelittlepony.unicopia.edibles.FlowerToxicityDeterminent; import com.minelittlepony.unicopia.edibles.FlowerToxicityDeterminent;
@ -262,7 +265,7 @@ public class UItems {
FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(juice), new ItemStack(burned_juice), 0); FurnaceRecipes.instance().addSmeltingRecipe(new ItemStack(juice), new ItemStack(burned_juice), 0);
} }
static void fixRecipes() { public static void fixRecipes() {
new OreReplacer() new OreReplacer()
.registerAll(stack -> stack.getItem().getRegistryName().equals(red_apple.getRegistryName())) .registerAll(stack -> stack.getItem().getRegistryName().equals(red_apple.getRegistryName()))
.done(); .done();

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia; package com.minelittlepony.unicopia.init;
import net.minecraft.block.material.MapColor; import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;

View file

@ -1,4 +1,4 @@
package com.minelittlepony.unicopia; package com.minelittlepony.unicopia.init;
import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.particle.client.ParticleUnicornMagic; import com.minelittlepony.unicopia.particle.client.ParticleUnicornMagic;
@ -21,7 +21,7 @@ public class UParticles {
public static int DISK; public static int DISK;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
static void init() { public static void init() {
UNICORN_MAGIC = Particles.instance().registerParticle(ParticleUnicornMagic::new); UNICORN_MAGIC = Particles.instance().registerParticle(ParticleUnicornMagic::new);
RAIN_DROPS = Particles.instance().registerParticle(ParticleRaindrops::new); RAIN_DROPS = Particles.instance().registerParticle(ParticleRaindrops::new);
CHANGELING_MAGIC = Particles.instance().registerParticle(ParticleChanglingMagic::new); CHANGELING_MAGIC = Particles.instance().registerParticle(ParticleChanglingMagic::new);

View file

@ -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.ResourceLocation;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;

View file

@ -5,9 +5,9 @@ import java.util.function.Supplier;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.UItems;
import com.minelittlepony.unicopia.edibles.IEdible; import com.minelittlepony.unicopia.edibles.IEdible;
import com.minelittlepony.unicopia.edibles.Toxicity; import com.minelittlepony.unicopia.edibles.Toxicity;
import com.minelittlepony.unicopia.init.UItems;
import com.minelittlepony.util.collection.Pool; import com.minelittlepony.util.collection.Pool;
import com.minelittlepony.util.collection.Weighted; import com.minelittlepony.util.collection.Weighted;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.item; package com.minelittlepony.unicopia.item;
import com.minelittlepony.unicopia.UBlocks; import com.minelittlepony.unicopia.init.UBlocks;
import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.block.SoundType; import net.minecraft.block.SoundType;

View 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();
}
}
}

View file

@ -122,11 +122,6 @@ public interface IPlayer extends ICaster<EntityPlayer>, IRaceContainer<EntityPla
*/ */
boolean onProjectileImpact(Entity projectile); 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. * Returns true if this player is the use.
*/ */

View file

@ -10,10 +10,20 @@ import net.minecraft.entity.Entity;
* *
* @param <T> The type of owner * @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(); Race getPlayerSpecies();
void setPlayerSpecies(Race race); void setPlayerSpecies(Race race);
void onDimensionalTravel(int destinationDimension); 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();
} }

View file

@ -1,7 +1,5 @@
package com.minelittlepony.unicopia.player; package com.minelittlepony.unicopia.player;
import net.minecraft.entity.Entity; public interface IUpdatable<T> {
void onUpdate(T sender);
public interface IUpdatable<T extends Entity> {
void onUpdate(T entity);
} }

View file

@ -12,7 +12,12 @@ class ItemCapabilities implements IRaceContainer<EntityItem>, IOwned<EntityItem>
private EntityItem owner; private EntityItem owner;
@Override @Override
public void onUpdate(EntityItem entity) { public void onUpdate() {
}
@Override
public void beforeUpdate() {
} }

View file

@ -159,7 +159,7 @@ class PlayerAbilityDelegate implements IAbilityReceiver, IUpdatable<EntityPlayer
IData data = ability.tryActivate(player); IData data = ability.tryActivate(player);
if (data != null) { 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; return data != null;

View file

@ -8,9 +8,9 @@ import com.google.common.collect.Maps;
import com.minelittlepony.model.anim.BasicEasingInterpolator; import com.minelittlepony.model.anim.BasicEasingInterpolator;
import com.minelittlepony.model.anim.IInterpolator; import com.minelittlepony.model.anim.IInterpolator;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UEffects;
import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.enchanting.PageState; import com.minelittlepony.unicopia.enchanting.PageState;
import com.minelittlepony.unicopia.init.UEffects;
import com.minelittlepony.unicopia.network.EffectSync; import com.minelittlepony.unicopia.network.EffectSync;
import com.minelittlepony.unicopia.network.MsgPlayerCapabilities; import com.minelittlepony.unicopia.network.MsgPlayerCapabilities;
import com.minelittlepony.unicopia.spell.IMagicEffect; import com.minelittlepony.unicopia.spell.IMagicEffect;
@ -146,9 +146,9 @@ class PlayerCapabilities implements IPlayer {
if (!getWorld().isRemote) { if (!getWorld().isRemote) {
if (full) { if (full) {
Unicopia.channel.broadcast(new MsgPlayerCapabilities(this)); Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(this));
} else { } else {
Unicopia.channel.broadcast(new MsgPlayerCapabilities(getPlayerSpecies(), getOwner())); Unicopia.getConnection().broadcast(new MsgPlayerCapabilities(getPlayerSpecies(), getOwner()));
} }
} }
} }
@ -181,7 +181,7 @@ class PlayerCapabilities implements IPlayer {
} }
@Override @Override
public void beforeUpdate(EntityPlayer entity) { public void beforeUpdate() {
if (entity.world.isRemote) { if (entity.world.isRemote) {
if (entity.isRiding() && entity.isSneaking()) { if (entity.isRiding() && entity.isSneaking()) {
@ -197,7 +197,7 @@ class PlayerCapabilities implements IPlayer {
} }
@Override @Override
public void onUpdate(EntityPlayer entity) { public void onUpdate() {
powers.onUpdate(entity); powers.onUpdate(entity);
gravity.onUpdate(entity); gravity.onUpdate(entity);

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.player; package com.minelittlepony.unicopia.player;
import com.minelittlepony.unicopia.Race; 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.mixin.MixinEntity;
import com.minelittlepony.unicopia.spell.IMagicEffect; import com.minelittlepony.unicopia.spell.IMagicEffect;
import com.minelittlepony.unicopia.util.serialisation.InbtSerialisable; import com.minelittlepony.unicopia.util.serialisation.InbtSerialisable;

View file

@ -21,17 +21,17 @@ public class PlayerSpeciesList {
} }
public boolean whiteListRace(Race race) { 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; return result;
} }
public boolean unwhiteListRace(Race race) { 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; return result;
} }
@ -41,7 +41,7 @@ public class PlayerSpeciesList {
return false; 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) { public Race validate(Race race, EntityPlayer sender) {
@ -69,7 +69,7 @@ public class PlayerSpeciesList {
} }
@Nullable @Nullable
public IPlayer getPlayer(EntityPlayer player) { public IPlayer getPlayer(@Nullable EntityPlayer player) {
if (player == null) { if (player == null) {
return null; return null;
} }

View file

@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntityCloud; import com.minelittlepony.unicopia.entity.EntityCloud;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer; import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Numeric; import com.minelittlepony.unicopia.power.data.Numeric;
import com.minelittlepony.util.vector.VecHelper; import com.minelittlepony.util.vector.VecHelper;

View file

@ -6,8 +6,8 @@ import javax.annotation.Nullable;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.IInAnimate; import com.minelittlepony.unicopia.entity.IInAnimate;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.player.IPlayer; import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.minelittlepony.unicopia.power.data.Hit; import com.minelittlepony.unicopia.power.data.Hit;

View file

@ -8,7 +8,7 @@ import javax.annotation.Nullable;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race; 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.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Hit; import com.minelittlepony.unicopia.power.data.Hit;
import com.minelittlepony.util.MagicalDamageSource; import com.minelittlepony.util.MagicalDamageSource;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race; 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.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Location; import com.minelittlepony.unicopia.power.data.Location;
import com.minelittlepony.util.WorldEvent; import com.minelittlepony.util.WorldEvent;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race; 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.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Hit; import com.minelittlepony.unicopia.power.data.Hit;
import com.minelittlepony.unicopia.spell.SpellShield; import com.minelittlepony.unicopia.spell.SpellShield;

View file

@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.power;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import com.minelittlepony.unicopia.Race; 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.player.IPlayer;
import com.minelittlepony.unicopia.power.data.Location; import com.minelittlepony.unicopia.power.data.Location;
import com.minelittlepony.util.vector.VecHelper; import com.minelittlepony.util.vector.VecHelper;

View file

@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.spell;
import java.util.function.Supplier; import java.util.function.Supplier;
import com.minelittlepony.unicopia.UParticles; import com.minelittlepony.unicopia.init.UParticles;
public class GenericSpell extends AbstractSpell { public class GenericSpell extends AbstractSpell {

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.spell; package com.minelittlepony.unicopia.spell;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntitySpell; import com.minelittlepony.unicopia.entity.EntitySpell;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.util.shape.IShape; import com.minelittlepony.util.shape.IShape;
import com.minelittlepony.util.shape.Line; import com.minelittlepony.util.shape.Line;

View file

@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.spell;
import java.util.Random; import java.util.Random;
import java.util.function.Consumer; import java.util.function.Consumer;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntitySpell; import com.minelittlepony.unicopia.entity.EntitySpell;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.util.MagicalDamageSource; import com.minelittlepony.util.MagicalDamageSource;
import com.minelittlepony.util.PosHelper; import com.minelittlepony.util.PosHelper;

View file

@ -7,7 +7,7 @@ import javax.annotation.Nullable;
import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Race;
import com.minelittlepony.unicopia.UClient; 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.mixin.MixinEntity;
import com.minelittlepony.unicopia.player.IFlyingPredicate; import com.minelittlepony.unicopia.player.IFlyingPredicate;
import com.minelittlepony.unicopia.player.IOwned; import com.minelittlepony.unicopia.player.IOwned;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.spell; 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.MagicalDamageSource;
import com.minelittlepony.util.PosHelper; import com.minelittlepony.util.PosHelper;
import com.minelittlepony.util.collection.IStateMapping; import com.minelittlepony.util.collection.IStateMapping;

View file

@ -7,9 +7,9 @@ import java.util.UUID;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.minelittlepony.unicopia.UParticles;
import com.minelittlepony.unicopia.entity.EntitySpell; import com.minelittlepony.unicopia.entity.EntitySpell;
import com.minelittlepony.unicopia.entity.IMagicals; import com.minelittlepony.unicopia.entity.IMagicals;
import com.minelittlepony.unicopia.init.UParticles;
import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.player.IPlayer; import com.minelittlepony.unicopia.player.IPlayer;
import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.player.PlayerSpeciesList;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.spell; 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.particle.Particles;
import com.minelittlepony.util.shape.IShape; import com.minelittlepony.util.shape.IShape;
import com.minelittlepony.util.shape.Sphere; import com.minelittlepony.util.shape.Sphere;

View file

@ -1,7 +1,7 @@
package com.minelittlepony.unicopia.spell; package com.minelittlepony.unicopia.spell;
import com.minelittlepony.unicopia.Predicates; 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.ParticleConnection;
import com.minelittlepony.unicopia.particle.Particles; import com.minelittlepony.unicopia.particle.Particles;
import com.minelittlepony.unicopia.player.IPlayer; import com.minelittlepony.unicopia.player.IPlayer;

View file

@ -1,6 +1,6 @@
package com.minelittlepony.unicopia.spell; 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.particle.Particles;
import com.minelittlepony.unicopia.player.PlayerSpeciesList; import com.minelittlepony.unicopia.player.PlayerSpeciesList;
import com.minelittlepony.util.MagicalDamageSource; import com.minelittlepony.util.MagicalDamageSource;

View file

@ -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));
}
}
}
}
}
}

View 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);
}
}
}

View file

@ -6,6 +6,9 @@ import java.util.Random;
import com.google.common.collect.Queues; import com.google.common.collect.Queues;
import com.minelittlepony.jumpingcastle.Exceptions; import com.minelittlepony.jumpingcastle.Exceptions;
import com.minelittlepony.unicopia.Unicopia; 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.util.math.ChunkPos;
import net.minecraft.world.World; 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.chunk.IChunkProvider;
import net.minecraft.world.gen.ChunkGeneratorOverworld; import net.minecraft.world.gen.ChunkGeneratorOverworld;
import net.minecraft.world.gen.IChunkGenerator; import net.minecraft.world.gen.IChunkGenerator;
import net.minecraft.world.gen.structure.MapGenStructureIO;
import net.minecraftforge.fml.common.IWorldGenerator; import net.minecraftforge.fml.common.IWorldGenerator;
import net.minecraftforge.fml.common.registry.GameRegistry; 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(); private static final UWorld instance = new UWorld();
@ -28,7 +32,28 @@ public class UWorld implements IWorldGenerator {
private static final Object locker = new Object(); 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) { synchronized (locker) {
Runnable task; Runnable task;
while ((task = tickTasks.poll()) != null) { while ((task = tickTasks.poll()) != null) {
@ -37,17 +62,8 @@ public class UWorld implements IWorldGenerator {
} }
} }
public static void enqueueTask(Runnable task) { public BlockInteractions getBlocks() {
synchronized (locker) { return blocks;
tickTasks.add(task);
}
}
private CloudGen cloudsGen = new CloudGen();
private StructuresGen structuresGen = new StructuresGen();
public void init() {
GameRegistry.registerWorldGenerator(this, 1);
} }
public void generateStructures(World world, int chunkX, int chunkZ, IChunkGenerator gen) { public void generateStructures(World world, int chunkX, int chunkZ, IChunkGenerator gen) {