mirror of
https://github.com/GTNewHorizons/ThaumicHorizons.git
synced 2026-10-26 14:33:47 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2450edb0b1 | ||
|
|
f5186b3c5c | ||
|
|
af113d4b2b | ||
|
|
fb577fca7a | ||
|
|
30a5a634e5 | ||
|
|
a858d3756d | ||
|
|
dac1733935 | ||
|
|
5c1dc0ba68 | ||
|
|
a7f1ae0c6f | ||
|
|
d7db8c7849 | ||
|
|
543482942a |
No files matched your search
+2
-2
@@ -1,9 +1,9 @@
|
||||
// Add your dependencies here
|
||||
|
||||
dependencies {
|
||||
api('com.github.GTNewHorizons:Baubles-Expanded:2.2.0-GTNH:dev')
|
||||
api('com.github.GTNewHorizons:Baubles-Expanded:2.2.2-GTNH:dev')
|
||||
|
||||
api('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev')
|
||||
|
||||
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.45:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.69:dev') {transitive = false}
|
||||
}
|
||||
+3
-1
@@ -96,7 +96,9 @@ usesMixinDebug = false
|
||||
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
|
||||
mixinPlugin =
|
||||
|
||||
# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail!
|
||||
# Specify the package that contains all of your Mixins. The package must exist or
|
||||
# the build will fail. If you have a package property defined in your mixins.<modid>.json,
|
||||
# it must match with this or the build will fail.
|
||||
mixinsPackage =
|
||||
|
||||
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ pluginManagement {
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.44'
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.46'
|
||||
}
|
||||
|
||||
|
||||
@@ -8,16 +8,24 @@ package com.kentington.thaumichorizons.common;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockDispenser;
|
||||
import net.minecraft.block.material.MapColor;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
|
||||
import net.minecraft.dispenser.BehaviorProjectileDispense;
|
||||
import net.minecraft.dispenser.IBlockSource;
|
||||
import net.minecraft.dispenser.IPosition;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.IProjectile;
|
||||
import net.minecraft.entity.monster.EntityBlaze;
|
||||
import net.minecraft.entity.monster.EntityEnderman;
|
||||
import net.minecraft.entity.monster.EntityGhast;
|
||||
@@ -44,7 +52,9 @@ import net.minecraft.item.crafting.ShapelessRecipes;
|
||||
import net.minecraft.nbt.NBTTagByte;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
@@ -57,6 +67,7 @@ import net.minecraftforge.oredict.ShapelessOreRecipe;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.kentington.thaumichorizons.client.lib.RenderEventHandler;
|
||||
import com.kentington.thaumichorizons.common.blocks.BlockAlchemite;
|
||||
import com.kentington.thaumichorizons.common.blocks.BlockBloodInfuser;
|
||||
@@ -132,6 +143,7 @@ import com.kentington.thaumichorizons.common.entities.EntitySyringe;
|
||||
import com.kentington.thaumichorizons.common.entities.EntityTaintPig;
|
||||
import com.kentington.thaumichorizons.common.entities.EntityVoltSlime;
|
||||
import com.kentington.thaumichorizons.common.entities.ItemSpawnerEgg;
|
||||
import com.kentington.thaumichorizons.common.handlers.BehaviorDispenseBoat;
|
||||
import com.kentington.thaumichorizons.common.items.ItemAmuletMirror;
|
||||
import com.kentington.thaumichorizons.common.items.ItemBarChocolate;
|
||||
import com.kentington.thaumichorizons.common.items.ItemBoatGreatwood;
|
||||
@@ -473,7 +485,7 @@ public class ThaumicHorizons {
|
||||
} catch (Exception var8) {
|
||||
log.error("Thaumic Horizons could not load its configuration file");
|
||||
} finally {
|
||||
if (config != null) {
|
||||
if (config != null && config.hasChanged()) {
|
||||
config.save();
|
||||
}
|
||||
}
|
||||
@@ -752,6 +764,7 @@ public class ThaumicHorizons {
|
||||
proxy.registerHandlers();
|
||||
proxy.registerRenderers();
|
||||
FMLCommonHandler.instance().bus().register(instance);
|
||||
initPotions();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@@ -796,7 +809,6 @@ public class ThaumicHorizons {
|
||||
shapelessOreDictRecipe(
|
||||
new ItemStack(ConfigItems.itemTripleMeatTreat),
|
||||
new Object[] { Items.sugar, itemMeatNugget, ConfigItems.itemNuggetBeef, ConfigItems.itemNuggetFish });
|
||||
initPotions();
|
||||
ResearchCategories.registerCategory(
|
||||
"ThaumicHorizons",
|
||||
new ResourceLocation("thaumichorizons", "textures/misc/vat.png"),
|
||||
@@ -3631,6 +3643,7 @@ public class ThaumicHorizons {
|
||||
new ItemStack(Items.dye, 1, 0), new ItemStack(Items.dye, 1, 15) },
|
||||
10));
|
||||
addAspectsToAllTheThings();
|
||||
registerDispenserBehavior();
|
||||
}
|
||||
|
||||
public static CreatureInfusionRecipe getCreatureInfusion(EntityLivingBase entityContained,
|
||||
@@ -3667,7 +3680,6 @@ public class ThaumicHorizons {
|
||||
public static void initPotions() {
|
||||
byte customPotions = 5;
|
||||
int potionOffset = Potion.potionTypes.length;
|
||||
boolean start = false;
|
||||
int var4;
|
||||
if (potionOffset < 128 - customPotions) {
|
||||
Potion[] potionTypes = new Potion[potionOffset + customPotions];
|
||||
@@ -3679,40 +3691,54 @@ public class ThaumicHorizons {
|
||||
var4 = -1;
|
||||
}
|
||||
|
||||
int visBoostPotionId = potionVisBoostID;
|
||||
var4 = getNextPotionId(var4);
|
||||
if (var4 >= 0) {
|
||||
potionVisBoostID = var4;
|
||||
PotionVisBoost.instance = new PotionVisBoost(potionVisBoostID, true, 6697847);
|
||||
PotionVisBoost.init();
|
||||
if (Potion.potionTypes[visBoostPotionId] != null) {
|
||||
visBoostPotionId = getNextPotionId(visBoostPotionId);
|
||||
}
|
||||
potionVisBoostID = visBoostPotionId;
|
||||
PotionVisBoost.instance = new PotionVisBoost(potionVisBoostID, true, 6697847);
|
||||
PotionVisBoost.init();
|
||||
|
||||
int visRegenPotionId = potionVisRegenID;
|
||||
var4 = getNextPotionId(var4);
|
||||
if (Potion.potionTypes[visRegenPotionId] != null) {
|
||||
visRegenPotionId = getNextPotionId(visRegenPotionId);
|
||||
}
|
||||
|
||||
var4 = getNextPotionId(var4);
|
||||
if (var4 >= 0) {
|
||||
potionVisRegenID = var4;
|
||||
PotionVisRegen.instance = new PotionVisRegen(potionVisRegenID, true, 5701759);
|
||||
PotionVisRegen.init();
|
||||
potionVisRegenID = visRegenPotionId;
|
||||
PotionVisRegen.instance = new PotionVisRegen(potionVisRegenID, true, 5701759);
|
||||
PotionVisRegen.init();
|
||||
|
||||
int vacuumPotionId = potionVacuumID;
|
||||
|
||||
if (Potion.potionTypes[vacuumPotionId] != null) {
|
||||
vacuumPotionId = getNextPotionId(vacuumPotionId);
|
||||
}
|
||||
|
||||
var4 = getNextPotionId(var4);
|
||||
if (var4 >= 0) {
|
||||
potionVacuumID = var4;
|
||||
PotionVacuum.instance = new PotionVacuum(potionVacuumID, true, 4210752);
|
||||
PotionVacuum.init();
|
||||
potionVacuumID = vacuumPotionId;
|
||||
PotionVacuum.instance = new PotionVacuum(potionVacuumID, true, 4210752);
|
||||
PotionVacuum.init();
|
||||
|
||||
int shockPotionId = potionShockID;
|
||||
|
||||
if (Potion.potionTypes[shockPotionId] != null) {
|
||||
shockPotionId = getNextPotionId(shockPotionId);
|
||||
}
|
||||
|
||||
var4 = getNextPotionId(var4);
|
||||
if (var4 >= 0) {
|
||||
potionShockID = var4;
|
||||
PotionShock.instance = new PotionShock(potionShockID, true, 11513861);
|
||||
PotionShock.init();
|
||||
potionShockID = shockPotionId;
|
||||
PotionShock.instance = new PotionShock(potionShockID, true, 11513861);
|
||||
PotionShock.init();
|
||||
|
||||
int synthesisPotionId = potionSynthesisID;
|
||||
|
||||
if (Potion.potionTypes[synthesisPotionId] != null) {
|
||||
synthesisPotionId = getNextPotionId(synthesisPotionId);
|
||||
}
|
||||
|
||||
var4 = getNextPotionId(var4);
|
||||
if (var4 >= 0) {
|
||||
potionSynthesisID = var4;
|
||||
PotionSynthesis.instance = new PotionSynthesis(potionSynthesisID, false, 3253280);
|
||||
PotionSynthesis.init();
|
||||
}
|
||||
potionSynthesisID = synthesisPotionId;
|
||||
PotionSynthesis.instance = new PotionSynthesis(potionSynthesisID, false, 3253280);
|
||||
PotionSynthesis.init();
|
||||
}
|
||||
|
||||
static int getNextPotionId(int start) {
|
||||
@@ -3889,6 +3915,96 @@ public class ThaumicHorizons {
|
||||
(new AspectList()).add(Aspect.WEAPON, 3).add(Aspect.BEAST, 3));
|
||||
}
|
||||
|
||||
private static void registerDispenserBehavior() {
|
||||
BlockDispenser.dispenseBehaviorRegistry
|
||||
.putObject(Item.getItemFromBlock(blockAlchemite), new BehaviorDefaultDispenseItem() {
|
||||
|
||||
@Override
|
||||
protected ItemStack dispenseStack(IBlockSource dispenser, ItemStack dispensedItem) {
|
||||
EnumFacing enumfacing = BlockDispenser.func_149937_b(dispenser.getBlockMetadata());
|
||||
World world = dispenser.getWorld();
|
||||
int x = dispenser.getXInt() + enumfacing.getFrontOffsetX();
|
||||
int y = dispenser.getYInt() + enumfacing.getFrontOffsetY();
|
||||
int z = dispenser.getZInt() + enumfacing.getFrontOffsetZ();
|
||||
|
||||
EntityAlchemitePrimed primedAlchemite = new EntityAlchemitePrimed(
|
||||
world,
|
||||
x + 0.5F,
|
||||
y + 0.5F,
|
||||
z + 0.5F,
|
||||
null);
|
||||
world.spawnEntityInWorld(primedAlchemite);
|
||||
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "game.tnt.primed", 1.0F, 1.0F);
|
||||
|
||||
dispensedItem.stackSize--;
|
||||
return dispensedItem;
|
||||
}
|
||||
});
|
||||
BlockDispenser.dispenseBehaviorRegistry.putObject(itemSyringeInjection, new BehaviorDefaultDispenseItem() {
|
||||
|
||||
@Override
|
||||
public ItemStack dispenseStack(IBlockSource dispenser, ItemStack stack) {
|
||||
if (!(stack.getItem() instanceof ItemSyringeInjection)) {
|
||||
return super.dispenseStack(dispenser, stack);
|
||||
}
|
||||
|
||||
World world = dispenser.getWorld();
|
||||
EnumFacing facing = BlockDispenser.func_149937_b(dispenser.getBlockMetadata());
|
||||
|
||||
double spawnX = dispenser.getX() + facing.getFrontOffsetX();
|
||||
double spawnY = dispenser.getY() + facing.getFrontOffsetY();
|
||||
double spawnZ = dispenser.getZ() + facing.getFrontOffsetZ();
|
||||
|
||||
IProjectile projectile = createProjectile(
|
||||
(ItemSyringeInjection) stack.getItem(),
|
||||
stack,
|
||||
world,
|
||||
spawnX,
|
||||
spawnY,
|
||||
spawnZ);
|
||||
|
||||
projectile.setThrowableHeading(
|
||||
facing.getFrontOffsetX(),
|
||||
facing.getFrontOffsetY() + 0.1F,
|
||||
facing.getFrontOffsetZ(),
|
||||
1.1F, // velocity
|
||||
6F // inaccuracy
|
||||
);
|
||||
|
||||
world.spawnEntityInWorld((Entity) projectile);
|
||||
|
||||
stack.stackSize--;
|
||||
return stack;
|
||||
}
|
||||
|
||||
private IProjectile createProjectile(ItemSyringeInjection item, ItemStack stack, World world, double x,
|
||||
double y, double z) {
|
||||
if (item.isPhial(stack.getItemDamage())) {
|
||||
return new EntityBlastPhial(world, x, y, z, stack);
|
||||
} else {
|
||||
return new EntitySyringe(world, x, y, z, stack.stackTagCompound);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void playDispenseSound(IBlockSource source) {
|
||||
source.getWorld().playAuxSFX(1002, source.getXInt(), source.getYInt(), source.getZInt(), 0);
|
||||
}
|
||||
});
|
||||
BlockDispenser.dispenseBehaviorRegistry.putObject(itemEggIncubated, new BehaviorProjectileDispense() {
|
||||
|
||||
protected IProjectile getProjectileEntity(World worldIn, IPosition position) {
|
||||
return new EntityEggIncubated(worldIn, position.getX(), position.getY(), position.getZ());
|
||||
}
|
||||
});
|
||||
BlockDispenser.dispenseBehaviorRegistry.putObject(
|
||||
itemBoatGreatwood,
|
||||
new BehaviorDispenseBoat(Collections.singleton(Material.water), EntityBoatGreatwood::new));
|
||||
BlockDispenser.dispenseBehaviorRegistry.putObject(
|
||||
itemBoatThaumium,
|
||||
new BehaviorDispenseBoat(Sets.newHashSet(Material.water, Material.lava), EntityBoatThaumium::new));
|
||||
}
|
||||
|
||||
static IRecipe shapelessOreDictRecipe(ItemStack res, Object[] params) {
|
||||
ShapelessOreRecipe rec = new ShapelessOreRecipe(res, params);
|
||||
CraftingManager.getInstance().getRecipeList().add(rec);
|
||||
@@ -3916,6 +4032,32 @@ public class ThaumicHorizons {
|
||||
warpedTumorValueProperty.comment = "Points of warp held by warped tumor.";
|
||||
warpedTumorValueProperty.setRequiresMcRestart(true);
|
||||
warpedTumorValue = warpedTumorValueProperty.getInt();
|
||||
|
||||
Property visboostPotionProperty = config.get("potions", "visboostPotionID", 24);
|
||||
visboostPotionProperty.comment = "Potion ID for the VisBoost Potion";
|
||||
visboostPotionProperty.setRequiresMcRestart(true);
|
||||
potionVisBoostID = visboostPotionProperty.getInt();
|
||||
|
||||
Property visregenPotionProperty = config.get("potions", "visregenPotionID", 25);
|
||||
visregenPotionProperty.comment = "Potion ID for the VisRegen Potion";
|
||||
visregenPotionProperty.setRequiresMcRestart(true);
|
||||
potionVisRegenID = visregenPotionProperty.getInt();
|
||||
|
||||
Property vacuumPotionProperty = config.get("potions", "vacuumPotionID", 26);
|
||||
vacuumPotionProperty.comment = "Potion ID for the Vacuum";
|
||||
vacuumPotionProperty.setRequiresMcRestart(true);
|
||||
potionVacuumID = vacuumPotionProperty.getInt();
|
||||
|
||||
Property shockPotionProperty = config.get("potions", "shockPotionID", 27);
|
||||
shockPotionProperty.comment = "Potion ID for the Shock Potion";
|
||||
shockPotionProperty.setRequiresMcRestart(true);
|
||||
potionShockID = shockPotionProperty.getInt();
|
||||
|
||||
Property synthesisPotionProperty = config.get("potions", "synthesisPotionID", 28);
|
||||
synthesisPotionProperty.comment = "Potion ID for the Sythesis Potion";
|
||||
synthesisPotionProperty.setRequiresMcRestart(true);
|
||||
potionSynthesisID = synthesisPotionProperty.getInt();
|
||||
|
||||
config.save();
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ public class BlockAlchemite extends BlockTNT {
|
||||
this.setBlockName("ThaumicHorizons_alchemite");
|
||||
this.setBlockTextureName("ThaumicHorizons:alchemite");
|
||||
this.setCreativeTab(ThaumicHorizons.tabTH);
|
||||
this.setStepSound(soundTypeGrass); // same place/break sound as TNT
|
||||
}
|
||||
|
||||
public void onBlockDestroyedByExplosion(final World p_149723_1_, final int p_149723_2_, final int p_149723_3_,
|
||||
|
||||
+15
-11
@@ -12,23 +12,27 @@ import net.minecraft.world.World;
|
||||
|
||||
public class EntityBlastPhial extends EntityPotion {
|
||||
|
||||
public EntityBlastPhial(final World p_i1790_1_) {
|
||||
super(p_i1790_1_);
|
||||
public EntityBlastPhial(final World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
public EntityBlastPhial(final World p_i1790_1_, final EntityLivingBase p_i1790_2_, final float power,
|
||||
final ItemStack p_i1790_3_) {
|
||||
super(p_i1790_1_, p_i1790_2_, p_i1790_3_);
|
||||
public EntityBlastPhial(final World world, final double x, final double y, final double z, final ItemStack stack) {
|
||||
super(world, x, y, z, stack);
|
||||
}
|
||||
|
||||
public EntityBlastPhial(final World world, final EntityLivingBase thrower, final float power,
|
||||
final ItemStack stack) {
|
||||
super(world, thrower, stack);
|
||||
this.setSize(0.25f, 0.25f);
|
||||
this.setSize(0.5f, 0.5f);
|
||||
this.setLocationAndAngles(
|
||||
p_i1790_2_.posX,
|
||||
p_i1790_2_.posY + p_i1790_2_.getEyeHeight(),
|
||||
p_i1790_2_.posZ,
|
||||
p_i1790_2_.rotationYaw,
|
||||
p_i1790_2_.rotationPitch);
|
||||
thrower.posX,
|
||||
thrower.posY + thrower.getEyeHeight(),
|
||||
thrower.posZ,
|
||||
thrower.rotationYaw,
|
||||
thrower.rotationPitch);
|
||||
this.posX -= MathHelper.cos(this.rotationYaw / 180.0f * (float) Math.PI) * 0.16f;
|
||||
this.posY -= 0.10000000149011612;
|
||||
this.posY -= 0.1;
|
||||
this.posZ -= MathHelper.sin(this.rotationYaw / 180.0f * (float) Math.PI) * 0.16f;
|
||||
this.setPosition(this.posX, this.posY, this.posZ);
|
||||
this.yOffset = 0.0f;
|
||||
|
||||
@@ -39,6 +39,7 @@ import io.netty.buffer.ByteBuf;
|
||||
public class EntitySyringe extends Entity implements IProjectile, IEntityAdditionalSpawnData {
|
||||
|
||||
public int color;
|
||||
public int canBePickedUp;
|
||||
public NBTTagCompound effects;
|
||||
private boolean inGround;
|
||||
private int field_145791_d;
|
||||
@@ -50,7 +51,6 @@ public class EntitySyringe extends Entity implements IProjectile, IEntityAdditio
|
||||
private int ticksInAir;
|
||||
private int knockbackStrength;
|
||||
private EntityLivingBase shootingEntity;
|
||||
private int canBePickedUp;
|
||||
private byte arrowShake;
|
||||
private double damage;
|
||||
|
||||
@@ -146,6 +146,13 @@ public class EntitySyringe extends Entity implements IProjectile, IEntityAdditio
|
||||
this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, p_i1756_3_ * 1.5f, 1.0f);
|
||||
}
|
||||
|
||||
public EntitySyringe(World world, double x, double y, double z, NBTTagCompound effects) {
|
||||
this(world, x, y, z);
|
||||
this.effects = effects;
|
||||
this.color = this.effects.getInteger("color");
|
||||
this.canBePickedUp = 1;
|
||||
}
|
||||
|
||||
public void writeEntityToNBT(final NBTTagCompound p_70014_1_) {
|
||||
p_70014_1_.setTag("effects", this.effects);
|
||||
p_70014_1_.setShort("xTile", (short) this.field_145791_d);
|
||||
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
package com.kentington.thaumichorizons.common.handlers;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.block.BlockDispenser;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
|
||||
import net.minecraft.dispenser.IBlockSource;
|
||||
import net.minecraft.entity.item.EntityBoat;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BehaviorDispenseBoat extends BehaviorDefaultDispenseItem {
|
||||
|
||||
public interface BoatFactory {
|
||||
|
||||
EntityBoat create(World world, double x, double y, double z);
|
||||
}
|
||||
|
||||
private final Set<Material> validMaterials;
|
||||
private final BoatFactory boatFactory;
|
||||
|
||||
public BehaviorDispenseBoat(Set<Material> validMaterials, BoatFactory boatFactory) {
|
||||
this.validMaterials = validMaterials;
|
||||
this.boatFactory = boatFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack dispenseStack(IBlockSource dispenser, ItemStack stack) {
|
||||
EnumFacing facing = BlockDispenser.func_149937_b(dispenser.getBlockMetadata());
|
||||
World world = dispenser.getWorld();
|
||||
|
||||
// Calculate spawn position slightly in front of the dispenser
|
||||
double spawnX = dispenser.getX() + (facing.getFrontOffsetX() * 1.25F);
|
||||
double spawnY = dispenser.getY() + (facing.getFrontOffsetY() * 1.125F) - 0.5F;
|
||||
double spawnZ = dispenser.getZ() + (facing.getFrontOffsetZ() * 1.25F);
|
||||
|
||||
// Block coordinates in front of the dispenser
|
||||
int targetX = dispenser.getXInt() + facing.getFrontOffsetX();
|
||||
int targetY = dispenser.getYInt() + facing.getFrontOffsetY();
|
||||
int targetZ = dispenser.getZInt() + facing.getFrontOffsetZ();
|
||||
|
||||
Material frontMaterial = world.getBlock(targetX, targetY, targetZ).getMaterial();
|
||||
|
||||
if (validMaterials.contains(frontMaterial)) {
|
||||
spawnY++;
|
||||
} else if (!Material.air.equals(frontMaterial)) {
|
||||
return stack;
|
||||
}
|
||||
|
||||
EntityBoat boat = boatFactory.create(world, spawnX, spawnY, spawnZ);
|
||||
|
||||
boat.rotationYaw = switch (facing) {
|
||||
case NORTH -> 90.0F;
|
||||
case WEST -> 180.0F;
|
||||
case EAST -> 0.0F;
|
||||
default -> -90.0F; // SOUTH or other
|
||||
};
|
||||
|
||||
world.spawnEntityInWorld(boat);
|
||||
|
||||
stack.stackSize--;
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
@@ -222,8 +222,16 @@ public class ExplosionAlchemite extends Explosion {
|
||||
if (block.getMaterial() == Material.air) {
|
||||
continue;
|
||||
}
|
||||
final AspectList aspects = this
|
||||
.getAspects(Item.getItemFromBlock(block), this.worldObj.getBlockMetadata(i, j, k));
|
||||
Item item = Item.getItemFromBlock(block);
|
||||
int meta = worldObj.getBlockMetadata(i, j, k);
|
||||
if (item == null) {
|
||||
item = block.getItemDropped(meta, worldObj.rand, 0);
|
||||
}
|
||||
if (item == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final AspectList aspects = this.getAspects(item, meta);
|
||||
if (aspects != null && aspects.size() > 0) {
|
||||
for (final Aspect asp2 : aspects.getAspects()) {
|
||||
final ItemStack stack = new ItemStack(
|
||||
|
||||
Reference in new issue
Block a user