下面列出了怎么用net.minecraftforge.fml.common.eventhandler.EventPriority的API类实例代码及写法,或者点击链接到github查看源代码。
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onIncomingPacket(PacketEvent.Incoming.Pre event) {
String channel;
ByteBuf packetBuffer;
final Packet packet = event.getPacket();
if (packet instanceof SPacketCustomPayload || packet instanceof FMLProxyPacket) {
if (packet instanceof SPacketCustomPayload) {
channel = ((SPacketCustomPayload) packet).getChannelName();
packetBuffer = ((SPacketCustomPayload) packet).getBufferData();
} else {
channel = ((FMLProxyPacket) packet).channel();
packetBuffer = ((FMLProxyPacket) packet).payload();
}
if (isBlockedPacket(channel, packetBuffer)) {
event.setCanceled(true);
}
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onOutgoingPacket(PacketEvent.Outgoing.Pre event) {
String channel;
ByteBuf packetBuffer;
final Packet packet = event.getPacket();
if (packet instanceof CPacketCustomPayload || packet instanceof FMLProxyPacket) {
if (packet instanceof CPacketCustomPayload) {
channel = ((CPacketCustomPayload) packet).getChannelName();
packetBuffer = ((CPacketCustomPayload) packet).getBufferData();
} else {
channel = ((FMLProxyPacket) packet).channel();
packetBuffer = ((FMLProxyPacket) packet).payload();
}
if (isBlockedPacket(channel, packetBuffer)) {
event.setCanceled(true);
}
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onPacketReceived(PacketEvent.Incoming.Pre event) {
if (!enabled.get()) return;
if(event.getPacket() instanceof SPacketPlayerPosLook) {
// when the server sets the rotation we use that instead
final SPacketPlayerPosLook packet = event.getPacket();
float pitch = packet.getPitch();
float yaw = packet.getYaw();
Angle va = gState.getClientAngles();
if(packet.getFlags().contains(EnumFlags.X_ROT))
pitch += va.getPitch();
if(packet.getFlags().contains(EnumFlags.Y_ROT))
yaw += va.getYaw();
gState.setServerAngles(pitch, yaw);
gState.setInitialized(true);
}
}
@SubscribeEvent(priority = EventPriority.LOW)
public void onRenderGameOverlayEvent(Render2DEvent event) {
if (!render.get()) {
return;
}
synchronized (spots) {
spots.forEach(
spot -> {
Vec3d top = spot.getTopVec();
Plane upper = VectorUtils.toScreen(top);
if (upper.isVisible()) {
double distance = getLocalPlayer().getPositionVector().distanceTo(top);
String name = String.format("%s (%.1f)", spot.getName(), distance);
SurfaceHelper.drawTextShadow(
name,
(int) upper.getX() - (SurfaceHelper.getTextWidth(name) / 2),
(int) upper.getY() - (SurfaceHelper.getTextHeight() + 1),
Colors.RED.toBuffer());
}
});
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onTick(LivingEvent.LivingUpdateEvent event) {
EntityLivingBase e = event.getEntityLiving();
if(e.isPotionActive(ModPotions.TIME_SLOW) && timeScale(e) == 0) {
boolean shouldFreeze = true;
if(e.isDead || e.getHealth() <= 0) {
shouldFreeze = false;
}
if(e instanceof EntityDragon && ((EntityDragon) e).getPhaseManager().getCurrentPhase().getType() == PhaseList.DYING) {
shouldFreeze = false;
}
if(shouldFreeze) {
handleImportantEntityTicks(e);
event.setCanceled(true);
}
}
}
@SubscribeEvent(priority = EventPriority.LOWEST)
public void handleHurt(LivingHurtEvent event)
{
EntityLivingBase e = event.getEntityLiving();
if (!event.isCanceled() && CyberwareAPI.isCyberwareInstalled(e, new ItemStack(this, 1, 2)))
{
float damageAmount = event.getAmount();
DamageSource damageSrc = event.getSource();
damageAmount = applyArmorCalculations(e, damageSrc, damageAmount);
damageAmount = applyPotionDamageCalculations(e, damageSrc, damageAmount);
damageAmount = Math.max(damageAmount - e.getAbsorptionAmount(), 0.0F);
damageMedkit.put(e.getEntityId(), damageAmount);
timesMedkit.put(e.getEntityId(), e.ticksExisted);
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public void power(CyberwareUpdateEvent event)
{
EntityLivingBase e = event.getEntityLiving();
for (int i = 0; i < 4; i++)
{
ItemStack test = new ItemStack(this, 1, i);
ItemStack installed = CyberwareAPI.getCyberware(e, test);
if (e.ticksExisted % 20 == 0 && installed != null)
{
boolean used = CyberwareAPI.getCapability(e).usePower(installed, getPowerConsumption(installed));
CyberwareAPI.getCyberwareNBT(installed).setBoolean("active", used);
}
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public void handleMissingEssentials(CyberwareUpdateEvent event)
{
EntityLivingBase e = event.getEntityLiving();
if (CyberwareAPI.isCyberwareInstalled(e, new ItemStack(this)))
{
if (e.ticksExisted % 20 == 0)
{
boolean powerUsed = CyberwareAPI.getCapability(e).usePower(new ItemStack(this), getPowerConsumption(null));
if (e.worldObj.isRemote && e == Minecraft.getMinecraft().thePlayer)
{
isBlind = !powerUsed;
}
}
}
else if (e.worldObj.isRemote && e == Minecraft.getMinecraft().thePlayer)
{
isBlind = false;
}
}
@SubscribeEvent(priority=EventPriority.HIGHEST)
public void power(CyberwareUpdateEvent event)
{
EntityLivingBase e = event.getEntityLiving();
ItemStack test = new ItemStack(this);
if (e.ticksExisted % 20 == 0 && CyberwareAPI.isCyberwareInstalled(e, test))
{
if (!CyberwareAPI.getCapability(e).usePower(test, getPowerConsumption(test)))
{
e.attackEntityFrom(EssentialsMissingHandler.heartless, Integer.MAX_VALUE);
}
}
if (CyberwareAPI.isCyberwareInstalled(e, new ItemStack(this)))
{
e.removePotionEffect(MobEffects.WEAKNESS);
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onClientTickEvent(ClientTickEvent event) {
Minecraft mc = Minecraft.getMinecraft();
if (mc.world != null) {
if (!mc.isGamePaused()) {
WorldPhysObjectManager manager = ValkyrienSkiesMod.VS_PHYSICS_MANAGER
.getManagerForWorld(mc.world);
if (event.phase == Phase.END) {
for (PhysicsWrapperEntity wrapper : manager.physicsEntities) {
wrapper.getPhysicsObject().onPostTickClient();
}
EntityDraggable.tickAddedVelocityForWorld(mc.world);
}
}
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true)
public void onDrawBlockHighlightEventFirst(DrawBlockHighlightEvent event) {
GL11.glPushMatrix();
BlockPos pos = Minecraft.getMinecraft().objectMouseOver.getBlockPos();
Optional<PhysicsObject> physicsObject = ValkyrienUtils
.getPhysicsObject(Minecraft.getMinecraft().world, pos);
if (physicsObject.isPresent()) {
RayTraceResult objectOver = Minecraft.getMinecraft().objectMouseOver;
if (objectOver != null && objectOver.hitVec != null) {
BufferBuilder buffer = Tessellator.getInstance().getBuffer();
oldXOff = buffer.xOffset;
oldYOff = buffer.yOffset;
oldZOff = buffer.zOffset;
buffer.setTranslation(-physicsObject.get()
.getShipRenderer().offsetPos.getX(), -physicsObject.get()
.getShipRenderer().offsetPos.getY(), -physicsObject.get()
.getShipRenderer().offsetPos.getZ());
physicsObject.get()
.getShipRenderer()
.applyRenderTransform(event.getPartialTicks());
}
}
}
@SubscribeEvent(priority = EventPriority.LOWEST, receiveCanceled = true)
public void onDrawBlockHighlightEventLast(DrawBlockHighlightEvent event) {
BlockPos pos = Minecraft.getMinecraft().objectMouseOver.getBlockPos();
Optional<PhysicsObject> physicsObject = ValkyrienUtils
.getPhysicsObject(Minecraft.getMinecraft().world, pos);
if (physicsObject.isPresent()) {
RayTraceResult objectOver = Minecraft.getMinecraft().objectMouseOver;
if (objectOver != null && objectOver.hitVec != null) {
BufferBuilder buffer = Tessellator.getInstance().getBuffer();
buffer.xOffset = oldXOff;
buffer.yOffset = oldYOff;
buffer.zOffset = oldZOff;
// wrapper.wrapping.renderer.inverseTransform(event.getPartialTicks());
// objectOver.hitVec = RotationMatrices.applyTransform(wrapper.wrapping.coordTransform.lToWTransform, objectOver.hitVec);
}
}
GL11.glPopMatrix();
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onEntityJoinWorldEvent(EntityJoinWorldEvent event) {
Entity entity = event.getEntity();
World world = entity.world;
BlockPos posAt = new BlockPos(entity);
Optional<PhysicsObject> physicsObject = ValkyrienUtils.getPhysicsObject(world, posAt);
if (!event.getWorld().isRemote && physicsObject.isPresent()
&& !(entity instanceof EntityFallingBlock)) {
if (entity instanceof EntityArmorStand
|| entity instanceof EntityPig || entity instanceof EntityBoat) {
EntityMountable entityMountable = new EntityMountable(world,
entity.getPositionVector(), CoordinateSpaceType.SUBSPACE_COORDINATES, posAt);
world.spawnEntity(entityMountable);
entity.startRiding(entityMountable);
}
physicsObject.get()
.getShipTransformationManager()
.getCurrentTickTransform().transform(entity,
TransformType.SUBSPACE_TO_GLOBAL);
// TODO: This should work but it doesn't because of sponge. Instead we have to rely on MixinChunk.preAddEntity() to fix this
// event.setCanceled(true);
// event.getWorld().spawnEntity(entity);
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onWorldTickEvent(WorldTickEvent event) {
// This only gets called server side, because forge wants it that way. But in case they
// change their mind, this exception will crash the game to notify us of the change.
if (event.side == Side.CLIENT) {
throw new IllegalStateException("This event should never get called client side");
}
World world = event.world;
switch (event.phase) {
case START:
PhysicsTickHandler.onWorldTickStart(world);
break;
case END:
IHasShipManager shipManager = (IHasShipManager) world;
shipManager.getManager().tick();
PhysicsTickHandler.onWorldTickEnd(world);
break;
}
}
@SubscribeEvent(priority = EventPriority.LOW)
public static void onMouseInputEventPre(MouseInputEvent.Pre event)
{
// Handle the mouse input inside all of the mod's GUIs via the event and then cancel the event,
// so that some mods like Inventory Sorter don't try to sort the Ender Utilities inventories.
// Using priority LOW should still allow even older versions of Item Scroller to work,
// since it uses normal priority.
if (event.getGui() instanceof GuiEnderUtilities)
{
try
{
event.getGui().handleMouseInput();
event.setCanceled(true);
}
catch (IOException e)
{
EnderUtilities.logger.warn("Exception while executing handleMouseInput() on {}", event.getGui().getClass().getName());
}
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public void onBucketFill(FillBucketEvent evt) {
if (evt.getResult() != Result.DEFAULT) return;
if (evt.getEmptyBucket().getItem() != EMPTY_BUCKET) return;
final RayTraceResult target = evt.getTarget();
if (target == null || target.typeOfHit != RayTraceResult.Type.BLOCK) return;
final TileEntity te = evt.getWorld().getTileEntity(target.getBlockPos());
if (te == null) return;
if (te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, target.sideHit)) {
final IFluidHandler source = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, target.sideHit);
final FluidStack drained = source.drain(containedFluid, false);
if (containedFluid.isFluidStackIdentical(drained)) {
source.drain(containedFluid, true);
evt.setFilledBucket(filledBucket.copy());
evt.setResult(Result.ALLOW);
}
}
}
@SubscribeEvent(priority=EventPriority.LOWEST)
public void hammer(BlockEvent.HarvestDropsEvent event)
{
if (event.getWorld().isRemote || event.getHarvester() == null || event.isSilkTouching())
return;
ItemStack held = event.getHarvester().getHeldItemMainhand();
if (!isHammer(held))
return;
List<ItemStack> rewards = HammerRegistry.getRewardDrops(event.getWorld().rand, event.getState(), ((IHammer) held.getItem()).getMiningLevel(held), event.getFortuneLevel());
if (rewards != null && rewards.size() > 0)
{
event.getDrops().clear();
event.setDropChance(1.0F);
event.getDrops().addAll(rewards);
}
}
@SubscribeEvent (priority = EventPriority.LOWEST, receiveCanceled = true)//We need to be called before JEI.
public void onGuiMouseEventpre(MouseInputEvent.Pre event) {
if (Mouse.getEventButton() == -1 || event.getGui() == null || !Mouse.getEventButtonState()) {
return;
}
Point mouse = GuiDraw.getMousePosition();
int eventButton = Mouse.getEventButton();
if (JEIIntegrationManager.searchBoxOwner == EnumItemBrowser.JEI) {
GuiTextFieldFilter fieldFilter = JEIIntegrationManager.getTextFieldFilter();
if (fieldFilter != null && fieldFilter.isMouseOver(mouse.x, mouse.y)) {
if (eventButton == 0) {
if (fieldFilter.isFocused() && (System.currentTimeMillis() - lastSearchBoxClickTime < 500)) {//double click
NEIClientConfig.world.nbt.setBoolean("searchinventories", !SearchField.searchInventories());
NEIClientConfig.world.saveNBT();
lastSearchBoxClickTime = 0L;
} else {
lastSearchBoxClickTime = System.currentTimeMillis();
}
} else if (eventButton == 1) {
NEIClientConfig.setSearchExpression("", false);
LayoutManager.searchField.setText("", false);
}
}
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onTooltip(ItemTooltipEvent event)
{
ArrayList<String> tooltip = (ArrayList<String>) event.getToolTip();
ItemStack stack = event.getItemStack();
NBTTagCompound nbt = NBTHelper.loadStackNBT(stack);
if (stack != null && nbt != null)
{
if (stack.getItem() instanceof ItemSword || stack.getItem() instanceof ItemArmor || stack.getItem() instanceof ItemBow || stack.getItem() instanceof ItemShield || stack.getItem() instanceof ItemTool)
{
Rarity rarity = Rarity.getRarity(nbt);
if (rarity != Rarity.DEFAULT)
{
addTooltips(tooltip, stack, nbt);
}
}
}
}
@SubscribeEvent(priority = EventPriority.LOWEST)
public void openGui(GuiOpenEvent event)
{
if (event.getGui() instanceof GuiMainMenu)
{
GuiCustom customMainMenu = CustomMainMenu.INSTANCE.config.getGUI("mainmenu");
if (customMainMenu != null)
{
event.setGui(customMainMenu);
}
}
else if (event.getGui() instanceof GuiCustom)
{
GuiCustom custom = (GuiCustom) event.getGui();
GuiCustom target = CustomMainMenu.INSTANCE.config.getGUI(custom.guiConfig.name);
if (target != custom)
{
event.setGui(target);
}
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public static void onBlockHit(PlayerInteractEvent.LeftClickBlock event) {
EventData data = new EventData(event);
if (data.getPlayer() == null || data.getPlayer().world.isRemote) return;
if (data.getHand() != EnumHand.MAIN_HAND) return;
if (!testCooldown(data.getPlayer())) return;
if (generateComplaint(StringType.ATTACK, data.getPlayer(), data.getBlock(), data)) {
resetCooldown(data.getPlayer());
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public static void onBlockActivated(PlayerInteractEvent.RightClickBlock event) {
EventData data = new EventData(event);
if (data.getPlayer() == null || data.getPlayer().world.isRemote) return;
if (data.getHand() != EnumHand.MAIN_HAND) return;
if (!testCooldown(data.getPlayer())) return;
if (generateComplaint(StringType.ACTIVATE, data.getPlayer(), data.getBlock(), data)) {
resetCooldown(data.getPlayer());
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public static void onItemActivated(PlayerInteractEvent.RightClickItem event) {
EventData data = new EventData(event);
if (data.getPlayer() == null || data.getPlayer().world.isRemote) return;
if (!testCooldown(data.getPlayer())) return;
if (generateComplaint(StringType.ACTIVATE, data.getPlayer(), event.getItemStack(), data)) {
resetCooldown(data.getPlayer());
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public static void onBlockDestroyed(BlockEvent.BreakEvent event) {
EventData data = new EventData(event);
if (data.getPlayer() == null || data.getPlayer().world.isRemote) return;
if (!testCooldown(data.getPlayer())) return;
if (generateComplaint(StringType.BREAK, data.getPlayer(), data.getBlock(), data)) {
resetCooldown(data.getPlayer());
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public static void onBlockPlace(BlockEvent.PlaceEvent event) {
EventData data = new EventData(event);
if (data.getPlayer() == null || data.getPlayer().world.isRemote) return;
if (!testCooldown(data.getPlayer())) return;
if (generateComplaint(StringType.PLACE, data.getPlayer(), data.getBlock(), data)) {
resetCooldown(data.getPlayer());
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public static void onFarmlandTrample(BlockEvent.FarmlandTrampleEvent event) {
EventData data = new EventData(event);
if (data.getPlayer() == null || data.getPlayer().world.isRemote) return;
if (!testCooldown(data.getPlayer())) return;
if (generateComplaint(StringType.TRAMPLE, data.getPlayer(), data.getBlock(), data)) {
resetCooldown(data.getPlayer());
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
public void onOreGenerate(OreGenEvent.GenerateMinable event) {
EventType eventType = event.getType();
if (ConfigHolder.disableVanillaOres &&
ORE_EVENT_TYPES.contains(eventType)) {
event.setResult(Result.DENY);
}
}
@SubscribeEvent(priority = EventPriority.LOWEST)
public static void registerRecipesLowest(RegistryEvent.Register<IRecipe> event) {
GTLog.logger.info("Running late material handlers...");
OrePrefix.runMaterialHandlers();
DecompositionRecipeHandler.runRecipeGeneration();
RecyclingRecipes.init();
WoodMachineRecipes.init();
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onGuiOpened(GuiOpenEvent event) {
// process keys and mouse input even if this gui is open
if (eating && getWorld() != null && getLocalPlayer() != null && event.getGui() != null) {
event.getGui().allowUserInput = true;
}
}
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onGuiOpen(GuiOpenEvent event) {
if (guiCloseGuard) {
// do not close the gui when this mod executes closeWindow()
event.setCanceled(true);
} else if (event.getGui() instanceof GuiInventory) {
// create a wrapper and replace the gui
event.setGui(openedGui = createGuiWrapper((GuiInventory) event.getGui()));
// server doesn't need to be informed the gui has been closed
guiNeedsClose.set(false);
}
}