From 10c287643002263183f5b0ab117c277fd4adc0de Mon Sep 17 00:00:00 2001 From: Linguardium Date: Tue, 14 Apr 2020 20:57:52 -0700 Subject: [PATCH] fix jitpack compile internal import not found, lets remove it then --- .gitignore | 22 ++++ carlsjr.js | 25 ---- gradle.properties | 2 +- .../tradesmen/TradesmenClient.java | 2 + .../tradesmen/api/TradesmenManager.java | 13 +- .../tradesmen/config/ModConfig.java | 2 +- .../tradesmen/entities/InitEntities.java | 6 + .../entities/SecretTradesmenEntityModel.java | 121 ++++++++++++++++++ .../entities/SecretTradesmenRenderer.java | 19 +++ .../tradesmen/entities/TradesmenEntity.java | 5 +- .../assets/tradesmen/lang/en_us.json | 3 +- .../textures/entity/black_llaman.png | Bin 0 -> 3468 bytes 12 files changed, 185 insertions(+), 35 deletions(-) create mode 100644 .gitignore delete mode 100644 carlsjr.js create mode 100644 src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenEntityModel.java create mode 100644 src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenRenderer.java create mode 100644 src/main/resources/assets/tradesmen/textures/entity/black_llaman.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c531d6f --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +#Gradle +.gradle/ +build/ +out/ +classes/ + +#IDEA +.idea/ +*.iml +*.ipr +*.iws + +#vscode +.settings/ +.vscode/ +bin/ +.classpath +.project + +#fabric +run/ +villager diff --git a/carlsjr.js b/carlsjr.js deleted file mode 100644 index 41b6622..0000000 --- a/carlsjr.js +++ /dev/null @@ -1,25 +0,0 @@ -var TraderTweaker = libcd.require("Tradesmen.TraderTweaker"); -var TweakerUtils = libcd.require("libcd.util.TweakerUtils"); -var newPickStack = TweakerUtils.createItemStack("minecraft:diamond_pickaxe"); -newPickStack = TweakerUtils.setDamage(newPickStack, 1430); -newPickStack = TweakerUtils.setName(newPickStack, "Patched Pickaxe"); -newPickStack = TweakerUtils.enchant(newPickStack, "minecraft:fortune", 1); - -TraderTweaker.addTrader("tradesmen:beef_trader","entity.tradesmen.carltwo.name", "tradesmen:textures/entity/taco_man.png", "minecraft:cow",[ - TraderTweaker.makeTrade("minecraft:rotten_flesh@4",1,4,1) - ], - [ - TraderTweaker.makeTrade("minecraft:cooked_beef@2",[ "minecraft:emerald","minecraft:rotten_flesh@4"],4,1), - ]); -TraderTweaker.addTrader("tradesmen:fish_trader","Sad Fishman", "", "minecraft:cod",[ - TraderTweaker.makeTrade(newPickStack,1,4,4,1) - ], - [ - TraderTweaker.makeTrade("minecraft:cooked_cod@1",newPickStack,4,1), - ]); -TraderTweaker.addTrader("tradesmen:pig_trader","Wigby", "", "minecraft:pig",[ - TraderTweaker.makeTrade("minecraft:porkchop",1,4,4,1) - ], - [ - TraderTweaker.makeTrade("minecraft:cooked_porkchop",1,4,4,1), - ]); \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index f679e17..dbca633 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ yarn_mappings = 1.15.2+build.15 loader_version = 0.8.2+build.194 #Mod properties -mod_version = 1.1.0 +mod_version = 1.1.1 maven_group = mod.linguardium archives_base_name = tradesmen diff --git a/src/main/java/mod/linguardium/tradesmen/TradesmenClient.java b/src/main/java/mod/linguardium/tradesmen/TradesmenClient.java index 3fcd2af..fba75cc 100644 --- a/src/main/java/mod/linguardium/tradesmen/TradesmenClient.java +++ b/src/main/java/mod/linguardium/tradesmen/TradesmenClient.java @@ -1,6 +1,7 @@ package mod.linguardium.tradesmen; import mod.linguardium.tradesmen.entities.InitEntities; +import mod.linguardium.tradesmen.entities.SecretTradesmenRenderer; import mod.linguardium.tradesmen.entities.TradesmenRenderer; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; @@ -10,5 +11,6 @@ public class TradesmenClient implements ClientModInitializer { @Override public void onInitializeClient() { EntityRendererRegistry.INSTANCE.register(InitEntities.TRADESMEN_ENTITY_TYPE, (entityRenderDispatcher, context) -> new TradesmenRenderer(entityRenderDispatcher)); + EntityRendererRegistry.INSTANCE.register(InitEntities.SECRET_TRADESMEN_ENTITY_TYPE, (entityRenderDispatcher, context) -> new SecretTradesmenRenderer(entityRenderDispatcher)); } } \ No newline at end of file diff --git a/src/main/java/mod/linguardium/tradesmen/api/TradesmenManager.java b/src/main/java/mod/linguardium/tradesmen/api/TradesmenManager.java index f18eef4..b77b85b 100644 --- a/src/main/java/mod/linguardium/tradesmen/api/TradesmenManager.java +++ b/src/main/java/mod/linguardium/tradesmen/api/TradesmenManager.java @@ -1,6 +1,6 @@ package mod.linguardium.tradesmen.api; -import jdk.internal.jline.internal.Nullable; + import mod.linguardium.tradesmen.Tradesmen; import mod.linguardium.tradesmen.entities.InitEntities; import mod.linguardium.tradesmen.entities.TradesmenEntity; @@ -109,7 +109,12 @@ private boolean spawnRoamingTrader() { return false; } - TradesmenEntity traderEntity = (TradesmenEntity) InitEntities.TRADESMEN_ENTITY_TYPE.spawn(this.world, (CompoundTag)null, (Text)null, (PlayerEntity)null, blockPos3, SpawnType.EVENT, false, false); + TradesmenEntity traderEntity=null; + if ((Tradesmen.getConfig().secrets && world.random.nextInt(1000) < 1)) { + traderEntity = (TradesmenEntity) InitEntities.SECRET_TRADESMEN_ENTITY_TYPE.spawn(this.world, (CompoundTag) null, (Text) null, (PlayerEntity) null, blockPos3, SpawnType.EVENT, false, false); + }else { + traderEntity = (TradesmenEntity) InitEntities.TRADESMEN_ENTITY_TYPE.spawn(this.world, (CompoundTag) null, (Text) null, (PlayerEntity) null, blockPos3, SpawnType.EVENT, false, false); + } if (traderEntity != null) { traderEntity.setTraderType(allowedTraderTypes.get(world.random.nextInt(allowedTraderTypes.size()))); for (int i=0;i SECRET_TRADESMEN_ENTITY_TYPE = + Registry.register( + Registry.ENTITY_TYPE, + new Identifier(Tradesmen.MOD_ID, "tradesmen_seller_secret"), + FabricEntityTypeBuilder.create(EntityCategory.MISC, TradesmenEntity::new).size(EntityDimensions.fixed(0.6F, 1.95F)).build() + ); public static void init() { } diff --git a/src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenEntityModel.java b/src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenEntityModel.java new file mode 100644 index 0000000..be374ba --- /dev/null +++ b/src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenEntityModel.java @@ -0,0 +1,121 @@ +package mod.linguardium.tradesmen.entities; + +import com.google.common.collect.ImmutableList; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.entity.model.CompositeEntityModel; +import net.minecraft.client.render.entity.model.ModelWithHat; +import net.minecraft.client.render.entity.model.ModelWithHead; +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.AbstractTraderEntity; +import net.minecraft.util.math.MathHelper; + +public class SecretTradesmenEntityModel extends CompositeEntityModel implements ModelWithHead, ModelWithHat { + protected ModelPart head=null; + protected ModelPart man_torso=null; + protected ModelPart arms=null; + protected ModelPart torso=null; + private ModelPart rightBackLeg=null; + private ModelPart leftBackLeg=null; + private ModelPart rightFrontLeg=null; + private ModelPart leftFrontLeg=null; + protected ModelPart nose=null; + private ModelPart rightChest=null; + private ModelPart leftChest=null; + + public SecretTradesmenEntityModel(float scale) { + this(scale, 128, 64); + } + + public SecretTradesmenEntityModel(float scale, int textureWidth, int textureHeight) { + float f = 0.7F; + this.head = (new ModelPart(this)).setTextureSize(textureWidth, textureHeight); + this.head.setPivot(0.0F, -10.0F, -5.0F); + this.head.setTextureOffset(0, 0).addCuboid(-4.0F, -10.0F, -4.0F, 8.0F, 10.0F, 8.0F, scale); + this.nose = (new ModelPart(this)).setTextureSize(textureWidth, textureHeight); + this.nose.setPivot(0.0F, -2.0F, 0.0F); + this.nose.setTextureOffset(24, 0).addCuboid(-1.0F, -1.0F, -5.0F, 2.0F, 2.0F, 2.0F, scale); + this.head.addChild(this.nose); + this.man_torso = (new ModelPart(this)).setTextureSize(textureWidth, textureHeight); + this.man_torso.setPivot(0.0F, -7.1F, 15.0F); + // Y = front/back + // Z = Height + // X = Left/right + this.man_torso.setTextureOffset(16, 20).addCuboid(-4.0F, 0.0F, -3.0F, 8.0F, 12.0F, 6.0F, scale); + this.man_torso.pitch=-1.5707964F; +/* this.robe = (new ModelPart(this)).setTextureSize(textureWidth, textureHeight); + this.robe.setPivot(0.0F, 0.0F, 0.0F); + this.robe.setTextureOffset(0, 38).addCuboid(-4.0F, 0.0F, -3.0F, 8.0F, 18.0F, 6.0F, scale + 0.5F); + this.man_torso.addChild(this.robe);*/ + this.arms = (new ModelPart(this)).setTextureSize(textureWidth, textureHeight); + this.arms.setTextureOffset(0, 40).addCuboid(-8.0F, -2.0F, -2.0F, 4.0F, 8.0F, 4.0F, scale); + this.arms.setTextureOffset(0, 40).addCuboid(4.0F, -2.0F, -2.0F, 4.0F, 8.0F, 4.0F, scale, true); + this.arms.setTextureOffset(18, 40).addCuboid(-4.0F, 2.0F, -2.0F, 8.0F, 4.0F, 4.0F, scale); + this.arms.setPivot(0.0F, -7.0F, -6.0F); + this.torso = new ModelPart(this, 79, 0).setTextureSize(textureWidth,textureHeight); + this.torso.addCuboid(-6.0F, -10.0F, -7.0F, 12.0F, 18.0F, 10.0F, f); + this.torso.setPivot(0.0F, 5.0F, 2.0F); + this.torso.pitch=1.5707964F; + this.torso.addChild(man_torso); + this.rightChest = new ModelPart(this, 45, 28).setTextureSize(textureWidth,textureHeight); + this.rightChest.addCuboid(-3.0F, 0.0F, 0.0F, 8.0F, 8.0F, 3.0F, f); + this.rightChest.setPivot(-8.5F, 3.0F, 3.0F); + this.rightChest.yaw = 1.5707964F; + this.leftChest = new ModelPart(this, 45, 41).setTextureSize(textureWidth,textureHeight); + this.leftChest.addCuboid(-3.0F, 0.0F, 0.0F, 8.0F, 8.0F, 3.0F, f); + this.leftChest.setPivot(5.5F, 3.0F, 3.0F); + this.leftChest.yaw = 1.5707964F; + this.rightBackLeg = new ModelPart(this, 79, 29).setTextureSize(textureWidth,textureHeight); + this.rightBackLeg.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 14.0F, 4.0F, f); + this.rightBackLeg.setPivot(-2.5F, 10.0F, 6.0F); + this.leftBackLeg = new ModelPart(this, 79, 29).setTextureSize(textureWidth,textureHeight); + this.leftBackLeg.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 14.0F, 4.0F, f); + this.leftBackLeg.setPivot(2.5F, 10.0F, 6.0F); + this.rightFrontLeg = new ModelPart(this, 79, 29).setTextureSize(textureWidth,textureHeight); + this.rightFrontLeg.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 14.0F, 4.0F, f); + this.rightFrontLeg.setPivot(-2.5F, 10.0F, -4.0F); + this.leftFrontLeg = new ModelPart(this, 79, 29).setTextureSize(textureWidth,textureHeight); + this.leftFrontLeg.addCuboid(-2.0F, 0.0F, -2.0F, 4.0F, 14.0F, 4.0F, f); + this.leftFrontLeg.setPivot(2.5F, 10.0F, -4.0F); + --this.rightBackLeg.pivotX; + ++this.leftBackLeg.pivotX; + --this.rightFrontLeg.pivotX; + ++this.leftFrontLeg.pivotX; + --this.rightFrontLeg.pivotZ; + --this.leftFrontLeg.pivotZ; + } + + public Iterable getParts() { + return ImmutableList.of(this.head, this.torso, this.arms, this.rightBackLeg, this.leftBackLeg, this.rightFrontLeg, this.leftFrontLeg, this.rightChest, this.leftChest); + } + + public void setAngles(T entity, float limbAngle, float limbDistance, float customAngle, float headYaw, float headPitch) { + boolean stillRollin = false; + if (entity instanceof AbstractTraderEntity) { + stillRollin = ((AbstractTraderEntity)entity).getHeadRollingTimeLeft() > 0; + } + + this.head.yaw = headYaw * 0.017453292F; + this.head.pitch = headPitch * 0.017453292F; + if (stillRollin) { + this.head.roll = 0.3F * MathHelper.sin(0.45F * customAngle); + this.head.pitch = 0.4F; + } else { + this.head.roll = 0.0F; + } + this.arms.pitch = -0.75F; + this.rightBackLeg.pitch = MathHelper.cos(limbAngle * 0.6662F) * 1.4F * limbDistance; + this.leftBackLeg.pitch = MathHelper.cos(limbAngle * 0.6662F + 3.1415927F) * 1.4F * limbDistance; + this.rightFrontLeg.pitch = MathHelper.cos(limbAngle * 0.6662F + 3.1415927F) * 1.4F * limbDistance; + this.leftFrontLeg.pitch = MathHelper.cos(limbAngle * 0.6662F) * 1.4F * limbDistance; + this.rightChest.visible = true; + this.leftChest.visible = true; + } + + public ModelPart getHead() { + return this.head; + } + + public void setHatVisible(boolean visible) { + this.head.visible = visible; + } +} diff --git a/src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenRenderer.java b/src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenRenderer.java new file mode 100644 index 0000000..4904e62 --- /dev/null +++ b/src/main/java/mod/linguardium/tradesmen/entities/SecretTradesmenRenderer.java @@ -0,0 +1,19 @@ +package mod.linguardium.tradesmen.entities; + +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.MobEntityRenderer; +import net.minecraft.util.Identifier; + +public class SecretTradesmenRenderer extends MobEntityRenderer> { + + public SecretTradesmenRenderer(EntityRenderDispatcher renderManager) { + super(renderManager, new SecretTradesmenEntityModel<>(0.0F), 0.5F); + //this.addFeature(new TradesmenClothingFeatureRenderer(this)); + } + + @Override + public Identifier getTexture(TradesmenEntity entity) { + return new Identifier("tradesmen:textures/entity/black_llaman.png"); + } + +} diff --git a/src/main/java/mod/linguardium/tradesmen/entities/TradesmenEntity.java b/src/main/java/mod/linguardium/tradesmen/entities/TradesmenEntity.java index 0521ff1..b8f19dd 100644 --- a/src/main/java/mod/linguardium/tradesmen/entities/TradesmenEntity.java +++ b/src/main/java/mod/linguardium/tradesmen/entities/TradesmenEntity.java @@ -1,6 +1,6 @@ package mod.linguardium.tradesmen.entities; -import jdk.internal.jline.internal.Nullable; + import mod.linguardium.tradesmen.Tradesmen; import mod.linguardium.tradesmen.api.TradesmenManager; import net.minecraft.entity.Entity; @@ -43,7 +43,6 @@ public class TradesmenEntity extends WanderingTraderEntity { private static final TrackedData TRADER_TIER = DataTracker.registerData(TradesmenEntity.class, TrackedDataHandlerRegistry.INTEGER);; private static final TrackedData TRADER_SPAWNED_ANIMAL= DataTracker.registerData(TradesmenEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND);; private int despawnDelay; - @Nullable private BlockPos wanderTarget; public TradesmenEntity(EntityType entityType, World world) { @@ -217,7 +216,7 @@ private void tickDespawnDelay() { } - @Nullable + private BlockPos getWanderTarget() { return this.wanderTarget; } diff --git a/src/main/resources/assets/tradesmen/lang/en_us.json b/src/main/resources/assets/tradesmen/lang/en_us.json index da9242f..c0d0b64 100644 --- a/src/main/resources/assets/tradesmen/lang/en_us.json +++ b/src/main/resources/assets/tradesmen/lang/en_us.json @@ -5,5 +5,6 @@ "text.autoconfig.tradesmen.option.spawnChance": "Chance (in %%) of spawning a trader", "text.autoconfig.tradesmen.option.disableWanderingTrader": "Disable Vanilla Wandering Trader", "text.autoconfig.tradesmen.option.disableWanderingTradesmen": "Disable Custom Wandering Tradesmen", - "text.autoconfig.tradesmen.option.despawnAnimals": "Despawn trader animal if leashed" + "text.autoconfig.tradesmen.option.despawnAnimals": "Despawn trader animal if leashed", + "text.autoconfig.tradesmen.option.secrets": "Secrets?" } diff --git a/src/main/resources/assets/tradesmen/textures/entity/black_llaman.png b/src/main/resources/assets/tradesmen/textures/entity/black_llaman.png new file mode 100644 index 0000000000000000000000000000000000000000..56ada4be76ffa088a025e673a18980461e3d9da6 GIT binary patch literal 3468 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